PDA

Просмотр полной версии : Windows Installer. как проверить существование ключа реестра



Redcat
30.01.2006, 09:27
Здравствуйте. Не подскажете, как можно проверить существование ключа реестра? Само значение ключа не важно.
Необходимо для Launch Condition в WindowsInstaller.

Как проверяется наличие файла на диске мне известно, но там сразу - условие существования (FILEEXISTS), а при добавления условия проверки на ключ реестра, в свойствах условия добавляется ещё и поле значения ключа. Оно нафиг мне не нужно, так как значение ключа, если он и существует, мне не известно. Нужно знать только сам факт существования. Потому, что если он существует, я знаю, что в системе есть определенная переменная среды, и я пользуюсь её значением для определения каталога установки по-умолчанию.

А вообще, вся каша заварилась для того, чтобы устанавливать файлы в директорию, путь к которой храниться в переменной среды. Но может сложиться так, что при установке этой переменной может еще и не быть в системе. Тогда мне надо прервать установку. Как решить проблему?

BBB
30.01.2006, 10:30
Redcat, Думаю, если нужная тебе переменная реестра не существует, то функция чтения переменной реестра вернет ошибку:

LONG RegQueryValueEx(
HKEY hKey, // handle to key
LPCTSTR lpValueName, // value name
LPDWORD lpReserved, // reserved
LPDWORD lpType, // type buffer
LPBYTE lpData, // data buffer
LPDWORD lpcbData // size of data buffer
);

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.

If the function fails, the return value is a nonzero error code defined in Winerror.h.

Redcat
30.01.2006, 13:52
Да, но я создаю Setup в MS Visual Studio Setup Project. Там негде кодировать, все настраивается с помощью свойств. Я не знаю как это выполнить

Eugie
30.01.2006, 14:56
См. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxtskaddingregistrylaunchcondition.asp

Tanatos
01.08.2007, 00:56
По поводу
... как можно проверить существование ключа реестра?...
я только недавно всерьез начал изучать программирование. Начал с KiXtart - скриптового языка. так вот там есть функция:
KeyExist( )

Action: Checks for the existence of a registry subkey.

Syntax: KEYEXIST ("subkey")

Parameters: Subkey - Identifies the subkey you want to locate.

Returns: 1 Subkey found
0 Subkey not found
Надеюсь перевод не особо нужен? ;) скрипт займет строчек пять кода.
Впрочем, полагаю, практически в любом серьезном языке есть функции, позволяющие проверить наличие ключа реестра.