如何在IF THEN阻止

时间:2015-10-13 18:29:38

标签: nsis

我有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 
}

1 个答案:

答案 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"
}