Inno-Setup在Win7 / Vista中更新原始用户的HKCU

时间:2011-02-23 17:31:41

标签: ms-access-2007 inno-setup

我正在尝试使用Inno Setup将我的应用程序路径添加为MS Access安装的受信任位置。我的脚本中有以下几行:

[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 个答案:

答案 0 :(得分:3)

我使用command-line utility reg.exe对原始用户的HKCU进行更新。至少从Win XP开始,Reg.exe已经附带Windows。由于早期版本的Windows可能没有reg.exe(或者由于某些其他原因可能无法访问),因此我已将注册表部分行留在原位以提供冗余和后备。

它仍然有点hackish,但我认为它比任何其他替代方案更好。以下是问题的界限与这种方法的关系:

[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

答案 1 :(得分:2)

针对您的特定情况的一个解决方案是创建第二个设置,该设置不需要提升权限,只是为了更新注册表。

您可以在第一个中包含第二个安装程序可执行文件,并使用已提及的ShellExecuteAsOriginalUser使用/ verysilent命令行参数调用它。

对于您的第二个问题,您必须将其作为一个不同的问题发布,我不是访问专家,但也许您可以执行整机配置,将相同的值添加到HKLM注册表项。

我5美分。