【问题标题】:NSIS installer MUI_ICON statement ignoredNSIS 安装程序 MUI_ICON 语句被忽略
【发布时间】:2015-11-11 16:35:16
【问题描述】:

我正在尝试在 Windows 8.1 上使用 NSIS 构建一个 exe 文件。安装程序必须在用户级别运行(而不是管理员,因为这会破坏其他东西)。

我无法使用以下语句为 exe 文件分配正确的图标:

!include MUI2.nsh
!define MUI_ICON  "path_to_icon.ico file"

除非我还包括以下内容,否则上述内容不起作用:

!insertmacro MUI_PAGE_WELCOME

包含 MUI_PAGE_WELCOME 的不良和令人费解的副作用是无法在用户执行级别启动安装程序(运行安装程序 exe 时不会出现任何窗口,尽管将鼠标悬停在底部任务栏中的图标上显示一个空白窗口)。如果我使用 Run as Adminstrator 调用安装程序,它会启动(确实会显示窗口并安装文件),但会导致启动的应用程序以管理员模式运行(不受欢迎)。

对于我的生活,我无法弄清楚 MUI_PAGE_WELCOME 和 MUI_ICON 之间的依赖关系以及如果使用前者需要以管理员身份运行 exe。

还有其他人遇到过这个问题吗?

【问题讨论】:

  • NSIS 版本?您能否发布重现该错误的最小示例。

标签: icons admin exe nsis


【解决方案1】:

如果没有完整的示例,我实际上可以编译,很难知道这里发生了什么。

我可以告诉你,在使用 MUI 时,你必须插入至少一个 MUI_PAGE_* 宏和至少一个 MUI_LANGUAGE 宏。其中一个宏基本上只会使用Icon "${MUI_ICON}" 来设置图标,但这是一个实现细节。

要控制 UAC 提升请求,您应该使用 RequestExecutionLevel 属性。

Outfile "Test.exe"
RequestExecutionLevel user

!include MUI2.nsh
!define MUI_ICON "myicon.ico"

!insertmacro MUI_PAGE_WELCOME ; Commenting out this line has no effect on the icon nor UAC elevation
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Section
SectionEnd

【讨论】:

  • Anders:我发现 MUI_PAGE_WELCOME 足以设置图标语句。没有它,MUI_ICON 语句将被忽略。但是,正如我在帖子中提到的,除非我们使用“以管理员身份运行”来运行,否则生成的 exe 无法正确启动。我正在使用“RequestExecutionLevel 用户”来确保不请求管理员级别。我将尝试发布重现此问题的代码的最小版本。
  • @perplexed 您使用的是 NSIS v2.46 还是 v3.0 beta 2?
  • 我使用的是 3.0b2。我应该恢复到 2.46 吗?谢谢。
  • @perplexed 不,但我需要一个可以测试的最小脚本。您能确认我的示例在有无欢迎页面的情况下都能正常工作吗?
  • 你的回答帮助了我。 NSIS 也忽略了我的 MUI_ICON 设置,直到我使用 !insertmacro MUI_LANGUAGE English 行。像魅力一样工作。这三个都是自己的工作,但语言宏对安装程序的外观影响最小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2015-08-13
  • 2014-03-04
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多