2012-05-18 3 views
2

В Inno инсталляционный скрипт, я устанавливаю переменную окружения путем добавления записи:Использование SendNotifyMessage в инсталлятор

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. 

Я хочу, чтобы мои пользователи имели возможность запускать вновь установленное приложение без необходимости перезагрузки (которые обычно необходимо было бы выше изменения можно увидеть в окружающей среде.)

Я планирую инсталлятор использовать DLL для вызова SendMessageTimeout, как описано здесь: Set environment variables from Delphi (Win32).

Delphi XE2 сообщает, что этот API устарел.

И выше описанная ветка StackOverflow предлагает использовать SendNotifyMessage, чтобы избежать долгого ожидания. Я не знаю, как построить этот вызов.

Может ли кто-нибудь показать мне синтаксис? Это тоже устарело?

Любые предложения по лучшему подходу?

Том

+1

Я не вижу причин, по которым «SendMessageTimeOut' устарел. Ты уверен? –

+2

* «Недопустимое определение API, используйте другую перегрузку» *, используйте другую перегрузку. –

ответ

7

Вы можете взглянуть на ChangesEnvironment директивы. Из документов:

Когда установлено Да, в конце установки установки уведомит других запущенных приложений (в частности, для Windows Explorer), что они должны перегружать свои переменные окружения из реестра.

+1

Работал отлично! Это случай RTFM, если я когда-либо видел его! Благодаря!! – RobertFrank

4

Ни одна из функций не устарела. Delphi говорит, что SendMessageTimeout устарел, потому что что объявление устарело. Сама функция API прекрасна. Поскольку вы будете называть это от чего-то, что не является Delphi, независимо от того, что Delphi говорит о , его объявление не имеет отношения к вам.

Поскольку вы действительно не заботитесь о возвращаемом значении сообщения, SendNotifyMessage - лучший выбор. Он не будет ждать вообще ответа, в то время как SendMessageTimeout будет ждать немного, чтобы получить ответ, который вы все равно проигнорируете.

Но, как указывает ответ Миртхея, среда установки, которую вы используете, уже предоставляет способ уведомления других программ, измененных средой, поэтому вы должны использовать это вместо того, чтобы пытаться сделать это вручную.

Смежные вопросы