GetCORSystemDirectory вызывается при установке MSI, уже не знаю для чего, и лучше бы ей быть реализованной.
Наш стандартный путь к расположению .NET: C:/windows/Microsoft.NET/Framework/v1.1.4322 Надо проверить как это в Windows
Замечательно! Я на днях только выкинул свой патч на эту тему, "потому что он больше не нужен". Достать из бранча 1.0.9?
Прикрепи сюда Виталику для справки.
Да... За полтора года, что этот патч существует, многое изменилось :) Тогда у меня была такая заглушка: 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; }
Проверь наконец как это в Windows и напиши нашу реализацию.
Имя общей папки, содержащей различные версии .Net содержится в ключе HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework переменная InstallRoot Рядом можно посмотреть номера установленных версий
Изначально такого ключа в реестре нет. он появляется только при установке .Net Fremework
Проверил, Windows берёт значение директории с последней версией .Net тоже из реестра, а конкретнее в HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\policy Если туда добавить, например ключ "v1.6", то GetCORSystemDirectory завершается ошибочно (скорее всего значения внутри ключа были определены неверно);
при тестировании необходимо также проверить, чтобы при отсутствии ключа в реестре функция возрвращала такой же код ошибки, как и в Windows. Сейчас она возвращает ERROR_INTERNAL_ERROR
при отсутствии ветки с .Net в реестре в WinXp: возвращаемое значение = -2147024894 длина записанной строки = 2377008 сама строка содержит случайные символы. Получается, что разработчики сами не предусмотрели такую ситуацию
Ошибся. WinХP возвращает вполне нормальный код ошибки. В шестнадцатечном коде = 0x80070002, в Wine такого кода нет. Соответствует он COR_E_FILENOTFOUND
Патч отправил
В версии wine-pure появилась своя реализация. Откатил патч: commit c4a6905744af1bff1d3795b368bad6bd44f27ace Author: Vitaly Perov <vitperov@etersoft.ru> Date: Tue May 27 20:30:35 2008 +0400 mscoree: add implementation of GetCORSystemDirectory