Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 1658 - Нужно реализовать GetCORSystemDirectory   Make a simular bug
Summary: Нужно реализовать GetCORSystemDirectory
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: dotNET; .NET; mono (show other bugs)
Version: 1.0.9
Hardware: PC Linux
: P5 major
Target Milestone: выпуск 1.0.9
Assignee: Виталий Перов
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on: 1536
Blocks: 1527 1665
  Show dependency treegraph
 
In work:
Reported: 2008-04-09 18:26 MSD by Vitaly Lipatov
Modified: 2010-09-03 18:56 MSD (History)
1 user (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Lipatov 2008-04-09 18:26:18 MSD
GetCORSystemDirectory вызывается при установке MSI, уже не знаю для чего, и лучше бы ей быть реализованной.
Comment 1 Vitaly Lipatov 2008-04-09 18:28:43 MSD
Наш стандартный путь к расположению .NET:
C:/windows/Microsoft.NET/Framework/v1.1.4322
Надо проверить как это в Windows
Comment 2 Константин Кондратюк 2008-04-10 07:57:21 MSD
Замечательно! Я на днях только выкинул свой патч на эту тему, "потому что он больше не нужен". Достать из бранча 1.0.9?
Comment 3 Vitaly Lipatov 2008-04-10 09:32:58 MSD
Прикрепи сюда Виталику для справки.
Comment 4 Константин Кондратюк 2008-04-10 09:49:19 MSD
Да... За полтора года, что этот патч существует, многое изменилось :)

Тогда у меня была такая заглушка:
HRESULT GetCORSystemDirectory(LPWSTR pBuffer, DWORD cchBuffer, DWORD* dwlength)
{
    if(!dwlength) return E_POINTER;

    *dwlength = GetSystemDirectoryW(pBuffer, cchBuffer);
    return S_OK;
}

Сейчас в коде вайна вот так:
HRESULT WINAPI GetCORSystemDirectory(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength)
{
    FIXME("(%p, %d, %p): stub!\n", pbuffer, cchBuffer, dwLength);

    if (!dwLength)
        return E_POINTER;

    *dwLength = 0;

    return S_OK;
}
Comment 5 Vitaly Lipatov 2008-05-13 11:57:32 MSD
Проверь наконец как это в Windows и напиши нашу реализацию.
Comment 6 Виталий Перов 2008-05-16 13:02:47 MSD
Имя общей папки, содержащей различные версии .Net содержится в ключе HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework переменная InstallRoot
Рядом можно посмотреть номера установленных версий
Comment 7 Виталий Перов 2008-05-26 15:08:01 MSD
Изначально такого ключа в реестре нет. он появляется только при установке .Net Fremework
Comment 8 Виталий Перов 2008-05-26 20:17:02 MSD
Проверил, Windows берёт значение директории с последней версией .Net тоже из реестра, а конкретнее в HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\policy

Если туда добавить, например ключ "v1.6", то GetCORSystemDirectory завершается ошибочно (скорее всего значения внутри ключа были определены неверно);
Comment 9 Виталий Перов 2008-05-27 18:41:54 MSD
при тестировании необходимо также проверить, чтобы при отсутствии ключа в реестре функция возрвращала такой же код ошибки, как и в Windows.
Сейчас она возвращает ERROR_INTERNAL_ERROR
Comment 10 Виталий Перов 2008-05-27 19:05:30 MSD
при отсутствии ветки с .Net в реестре в WinXp:
возвращаемое значение = -2147024894
длина записанной строки = 2377008
сама строка содержит случайные символы.

Получается, что разработчики сами не предусмотрели такую ситуацию
Comment 11 Виталий Перов 2008-05-27 21:08:41 MSD
Ошибся. WinХP возвращает вполне нормальный код ошибки. В шестнадцатечном коде = 0x80070002, в Wine такого кода нет. Соответствует он COR_E_FILENOTFOUND
Comment 12 Виталий Перов 2008-05-27 21:09:01 MSD
Патч отправил
Comment 13 Виталий Перов 2010-09-03 18:56:41 MSD
В версии wine-pure появилась своя реализация. Откатил патч:

commit c4a6905744af1bff1d3795b368bad6bd44f27ace
Author: Vitaly Perov <vitperov@etersoft.ru>
Date:   Tue May 27 20:30:35 2008 +0400

    mscoree: add implementation of GetCORSystemDirectory