我想在用户级别下安装MSI软件包,并在HKLM下设置几个注册表项。第二个需要管理员级别,我可以使用NSIS :: UAC插件完成它。但我需要一种方法来通知InnerInstance(具有管理员级权限)用户选择的复选框。有以下可能的方式来交换这些信息(只有1或0)
没有成功,APPDATA不同,COMMONAPPDATA需要管理员级别,TMP也不是一个选项,因为它取决于个人资料名称
没有成功,变量不存在。 BTW即使我运行简单的控制台,设置变量并运行其他控制台 - 我没有看到变量
假设它对于简单的安装问题来说过于复杂,但如果没有其他选项可用则会选择它
!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
它假设工作,但没有
那么,有人可以通过链接和想法帮助我吗?
答案 0 :(得分:0)
没有正式的Unicode版本的NSIS,有一个分叉项目,但是这个配置不支持UAC插件,因此不提供它的编译DLL(如果你问的话,你可能会得到一个编译版本在NSIS IRC频道)。
这种混合安装程序很难做对,不应该做恕我直言。如果您使用访问控制插件为所有用户提供对$windir\temp\{yourguid}
或HKLM\Software\{yourguid}
的写入权限,您可能可以交换信息,但这也是一个潜在的安全漏洞。命名的全局内核对象(信号量,内存映射等)存在同样的问题