【问题标题】:NSIS Installer asks to modify computerNSIS 安装程序要求修改计算机
【发布时间】:2011-05-20 02:45:36
【问题描述】:

我有一个程序可以解压到 TEMP 目录,然后自行运行,然后从 TEMP 目录中删除自己。当我使用 NSIS 生成的单文件可执行文件尝试运行时,UAC 会询问:“您是否要允许来自未知发布者的以下程序修改您的计算机?”

澄清一下:安装程序只解压到 TEMP 目录,包含的程序不会触发 UAC。我认为这与 NSIS 所做的事情有关,但我不知道是什么或如何阻止它。我已经删除了 NSIS 脚本的几乎所有行,它仍然激怒了 UAC。

如果重要的话,我在 Windows 7 上的 python2.5 上使用 py2exe 以及 pymunk 和 pygame 库。 (但同样,它仅在通过 NSIS 运行时触发 UAC。)

我如何使它不触发任何 UAC 准备就绪?我需要签名密钥吗?

【问题讨论】:

    标签: uac nsis


    【解决方案1】:

    RequestExecutionLevel用户

    发生这种情况是因为 Windows (错误地)将 NSIS 检测为需要管理员权限的安装程序。 MS 甚至没有询问 NSIS 开发人员就添加了此检测!

    你可能想使用 $pluginsdir,它会被 nsis 自动删除:

    Section
    InitPluginsDir
    SetOutPath $pluginsdir
    File myapp.exe
    ExecWait '"$pluginsdir\myapp.exe"'
    SetOutPath $temp ;make sure pluginsdir is not locked
    SectionEnd
    

    【讨论】:

    • 哇,谢谢!不是我一直在寻找的答案,但 stackoverflow 总能教会我一些新东西。
    【解决方案2】:

    Windows 具有“安装程序检测”启发式方法。您可以通过添加一个清单来抑制它们,该清单要么嵌入在 exe 中,要么位于它旁边,名为whatever.exe.manifest,上面写着“我不需要提升”。 How to prevent Vista from requiring elevation on patch.exe? 是我发现的众多问题中的第一个。

    安装程序检测启发式几乎完全基于文件名,因此如果出于某种原因您不想使用清单,请尝试重命名文件,以免包含字符串 setup、update、patch 和之类的。

    【讨论】:

    • 名称只是其中的一部分,他们还会检查应用程序/公司名称甚至签名检查
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多