Обновление Inno-Setup HKCU оригинального пользователя в Win7 / Vista - PullRequest
1 голос
/ 23 февраля 2011

Я пытаюсь добавить путь к своему приложению в качестве надежного расположения для установки MS Access с использованием Inno Setup.У меня есть следующие строки в моем сценарии:

[Registry]
; Add the application folder as a trusted location for Access 2007
Root: HKCU; SubKey: Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}; ValueType: string; ValueName: Path; ValueData: {app}; Check: AccessVersion('2007');
Root: HKCU; SubKey: Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}; ValueType: string; ValueName: Description; ValueData: Grandjean and Braverman applications; Check: AccessVersion('2007');
Root: HKCU; SubKey: Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}; ValueType: dword; ValueName: AllowSubfolders; ValueData: 1; Check: AccessVersion('2007');

Это прекрасно работает в Windows XP и более ранних версиях, но часто происходит сбой при управлении учетными записями пользователей в Vista / Win7, потому что (повышенный) пользователь, выполняющий установку, может отличатьсячем текущий вошедший в систему пользователь.

Единственный обходной путь, о котором я могу подумать, - это получить файл .reg, который извлекается и запускается через ShellExecAsOriginalUser, но это кажется хакерским.Есть ли лучший способ?

В идеале я хотел бы добавить доверенное местоположение для всех пользователей в системе.

Ответы [ 2 ]

3 голосов
/ 23 февраля 2011

Я использовал утилиту командной строки reg.exe для обновления HKCU исходного пользователя. Reg.exe поставляется с Windows, по крайней мере, с Win XP. Поскольку более ранние версии Windows могут не иметь reg.exe (или могут быть недоступны по какой-либо другой причине), я оставил строки раздела «Реестр» на месте, чтобы обеспечить избыточность и откат.

Это все еще немного хакерски, но я думаю, что это лучше, чем любая другая альтернатива. Вот как выглядят строки из вопроса с таким подходом:

[Registry]
; Add the application folder as a trusted location for Access 2007 for the installing user (degrades gracefully for Windows 2000 and earlier)
Root: HKCU; SubKey: Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}; ValueType: string; ValueName: Path; ValueData: {app}; Check: AccessVersion('2007');
Root: HKCU; SubKey: Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}; ValueType: string; ValueName: Description; ValueData: Grandjean and Braverman applications; Check: AccessVersion('2007');
Root: HKCU; SubKey: Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}; ValueType: dword; ValueName: AllowSubfolders; ValueData: 1; Check: AccessVersion('2007');

[Run]
; Add the application folder as a trusted location for Access 2007 for the current user
Filename: Reg.exe; Parameters: "add ""HKCU\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}"" /v Path /t REG_SZ /d ""{app}"" /f"; Flags: runasoriginaluser; Check: AccessVersion('2007'); StatusMsg: Adding trusted location...
Filename: Reg.exe; Parameters: "add ""HKCU\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}"" /v Description /t REG_SZ /d ""Grandjean and Braverman applications"" /f"; Flags: runasoriginaluser; Check: AccessVersion('2007'); StatusMsg: Adding trusted location...
Filename: Reg.exe; Parameters: "add ""HKCU\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\{#DirName}"" /v AllowSubfolders /t REG_DWORD /d 1 /f"; Flags: runasoriginaluser; Check: AccessVersion('2007'); StatusMsg: Adding trusted location...

Обратите внимание, что строки были скопированы и изменены из секции [Registry] в секцию [Run] и имеют установленный флаг runasoriginaluser.

2 голосов
/ 23 февраля 2011

Одним из решений в вашем конкретном случае является создание второй установки, для которой не требуются повышенные привилегии, просто для обновления реестра.

Вы можете включить этот второй исполняемый файл установки внутри первого и вызвать его с помощью/ verysilent параметр командной строки с использованием уже упомянутого ShellExecuteAsOriginalUser.

Для второго вопроса вы должны опубликовать его как другой вопрос, я не эксперт по доступу, но, возможно, вы можете выполнить настройку всей машины, добавивте же значения, что и в разделе реестра HKLM.

Мои 5 центов.

...