You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Squirrel自动创建快捷方式并执行包内NSSM第三方EXE的问题问询

问题根因

Squirrel默认会扫描安装包内所有.exe后缀的文件,将其全部识别为应用程序入口,自动为其创建桌面、开始菜单快捷方式,且在首次安装后自动启动。你的C#主程序已适配Squirrel事件规则,但NSSM作为第三方工具没有对应的Squirrel适配逻辑,因此会触发默认处理流程。

可用解决方案

方案1:打包时修改NSSM文件后缀(最稳妥)

这是成本最低且兼容性最好的方案:

  • 打包前将nssm.exe重命名为nssm.bin(或其他非.exe后缀),再放入安装包目录
  • 在你已实现的Squirrel事件中增加重命名逻辑,在程序首次运行时将文件改回.exe后缀即可,参考代码:
using (var mgr = new UpdateManager("http://updatepath"))
{
    SquirrelAwareApp.HandleEvents(
        onInitialInstall: v => {
            MessageBox.Show("onInitialInstall");
            // 重命名NSSM文件
            var nssmBinPath = Path.Combine(AppContext.BaseDirectory, "nssm.bin");
            var nssmExePath = Path.Combine(AppContext.BaseDirectory, "nssm.exe");
            if (File.Exists(nssmBinPath))
            {
                File.Move(nssmBinPath, nssmExePath);
            }
            // 仅为你自己的主程序创建快捷方式
            mgr.CreateShortcutForThisExe();
        },
        onAppUpdate: v => {
            MessageBox.Show("onAppUpdate");
            // 更新时也检查一次重命名逻辑
            var nssmBinPath = Path.Combine(AppContext.BaseDirectory, "nssm.bin");
            var nssmExePath = Path.Combine(AppContext.BaseDirectory, "nssm.exe");
            if (File.Exists(nssmBinPath))
            {
                File.Move(nssmBinPath, nssmExePath);
            }
            mgr.CreateShortcutForThisExe();
        },
        onAppUninstall: v => mgr.RemoveShortcutForThisExe(),
        onFirstRun: () => MessageBox.Show("onFirstRun"));
}

Squirrel不会处理非.exe后缀的文件,因此不会自动为nssm.bin创建快捷方式或启动。

方案2:打包时添加排除参数

如果你使用Squirrel CLI执行releasify命令打包,直接添加--exclude参数指定排除nssm.exe的快捷方式生成规则即可:

Squirrel --releasify 你的应用包名.nupkg --exclude "nssm.exe"

该参数会告诉Squirrel不要对nssm.exe执行创建快捷方式、自动启动的默认逻辑。

方案3:事件处理中主动删除NSSM的快捷方式

如果不想修改文件或打包参数,可以在Squirrel的安装/更新事件中主动调用接口删除NSSM对应的快捷方式:

onInitialInstall: v => {
    mgr.CreateShortcutForThisExe();
    // 删除NSSM的所有快捷方式
    mgr.RemoveShortcutsForExecutable("nssm.exe", ShortcutLocation.Desktop | ShortcutLocation.StartMenu);
}

这个方案缺点是Squirrel会先创建NSSM的快捷方式再被你删掉,极端情况下用户可能会看到桌面闪过NSSM的图标再消失,不如前两个方案体验好。

内容的提问来源于stack exchange,提问作者James Harcourt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 13:06:03