如何在 IF THEN 块中使用 RequestExecutionLevel

How to use RequestExecutionLevel inside IF THEN block

我有包含 3 个项目的 nsis 包: 1..Net 4.0设置 2. C++ 重新分发 3. 我的应用程序

我的安装程序总是没有提示。在此包中,我检查已安装的 .Net 和 C++ 版本,如果我有更大的版本,则从我的包中安装,但如果用户有正确版本的 net 和 C++,我的包只是将我的应用程序导出到临时文件夹并 运行 它。

要安装 .net 或 c++,用户必须具有管理员权限,但 运行 我的应用程序不需要。我不想总是使用 RequestExecutionLevel admin

请求管理员权限

有可能在包中实现这样的逻辑:

IF (user_has_net != true || user_has_c++ != true) {
   RequestExecutionLevel admin
} else {
   RequestExecutionLevel user 
}

RequestExecutionLevel 属性 是在编译时为您的安装程序设置的,并嵌入在安装程序清单中。无法在运行时设置。

我能想到的最佳解决方法是嵌入另一个处理 C++ 运行时库和 .Net 的安装程序。然后该安装程序可以将 RequestExecutionLevel 设置为 admin 并根据需要由您的主安装程序提取和执行。

像这样的东西应该有用。

IF (user_has_net != true || user_has_c++ != true) {
  SetOutPath "$TEMP"
  File "OtherInstaller.exe"
  ExecWait "$TEMP\OtherInstaller.exe"
}