如何在 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"
}
我有包含 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"
}