我有nsis包,包含3个项目: 1. .Net 4.0设置 2. C ++ redistr 3.我的应用
我的安装程序始终保持沉默。在这个软件包中,我检查安装的.Net和C ++版本,如果我有更大版本,请从我的软件包安装,但如果用户有正确的net和c ++版本,我的软件包只需将我的应用程序导出到临时文件夹并运行它。
要安装.net或c ++用户必须具有管理员资格,但要运行我的应用程序则不需要。我不想总是请求管理员使用 RequestExecutionLevel admin
有可能在包中实现这样的逻辑:
IF (user_has_net != true || user_has_c++ != true) {
RequestExecutionLevel admin
} else {
RequestExecutionLevel user
}
答案 0 :(得分:2)
在编译时为安装程序设置了RequestExecutionLevel
属性,该属性嵌入在安装程序清单中。它不能在运行时设置。
我能想到的最好的解决方法是嵌入另一个处理C ++运行时库和.Net的安装程序。然后,该安装程序可以将RequestExecutionLevel
设置为admin
,并根据需要由主安装程序解压缩并执行。
这样的事情应该有效。
IF (user_has_net != true || user_has_c++ != true) {
SetOutPath "$TEMP"
File "OtherInstaller.exe"
ExecWait "$TEMP\OtherInstaller.exe"
}