Unicode NSIS安装程序和UAC插件:如何在内部和外部实例之间交换数据

时间:2012-02-06 18:25:40

标签: windows installer uac nsis

我想在用户级别下安装MSI软件包,并在HKLM下设置几个注册表项。第二个需要管理员级别,我可以使用NSIS :: UAC插件完成它。但我需要一种方法来通知InnerInstance(具有管理员级权限)用户选择的复选框。有以下可能的方式来交换这些信息(只有1或0)

  • 两个实例都可以访问的文件夹中的Ini文件

没有成功,APPDATA不同,COMMONAPPDATA需要管理员级别,TMP也不是一个选项,因为它取决于个人资料名称

  • 全球申请变量

没有成功,变量不存在。 BTW即使我运行简单的控制台,设置变量并运行其他控制台 - 我没有看到变量

  • 编写一个设置并获取信号量的插件

假设它对于简单的安装问题来说过于复杂,但如果没有其他选项可用则会选择它

  • SyncVariable宏

!macro _SyncVariable _variable   !定义Lprefix L $ { LINE }   推$ R0   转到_SyncVariableInner $ {Lprefix}   _SyncVariableOuter $ {} Lprefix:     StrCpy $ R0 $ {_ variable}     返回   _SyncVariableInner $ {} Lprefix:   !insertmacro UAC_AsUser_Call Label _SyncVariableOuter $ {Lprefix} $ {UAC_SYNCREGISTERS}   StrCpy $ {_ variable} $ R0   !undef Lprefix   pop $ R0 !macroend !define SyncVariable !insertmacro _SyncVariable

它假设工作,但没有

  • 获取新的UAC插件 - 没有看到我可以获取二进制文件的位置,因为最新版本不支持NSIS unicode build

那么,有人可以通过链接和想法帮助我吗?

1 个答案:

答案 0 :(得分:0)

没有正式的Unicode版本的NSIS,有一个分叉项目,但是这个配置不支持UAC插件,因此不提供它的编译DLL(如果你问的话,你可能会得到一个编译版本在NSIS IRC频道)。

这种混合安装程序很难做对,不应该做恕我直言。如果您使用访问控制插件为所有用户提供对$windir\temp\{yourguid}HKLM\Software\{yourguid}的写入权限,您可能可以交换信息,但这也是一个潜在的安全漏洞。命名的全局内核对象(信号量,内存映射等)存在同样的问题