以静默方式自动启动ClickOnce应用程序

时间:2009-07-16 21:38:20

标签: .net clickonce startup silent

我有一个使用ClickOnce进行部署的应用程序,我已设法在用户登录时启动应用程序。

我的问题是我需要启动隐藏的应用程序(我不希望用户在需要它之前必须将其最小化 - 我希望它放在系统托盘中)。在使用ClickOnce之前,我只是检查参数以查看是否传入了“/ silent”。似乎无法在ClickOnce应用程序中执行此操作(您可以检查是否传入了URI查询字符串,但是因为这是从.appref-ms快捷方式运行似乎无法获取/silent参数)

如何获取/silent参数,或者如何判断应用程序是否因用户登录而启动(而不是用户从快捷方式启动应用程序)?

重要的是,无论提出什么解决方案都不需要管理员权限,但使用的语言并不像我可能将其移植到.NET那么重要。

2 个答案:

答案 0 :(得分:0)

我认为没有一种非常干净的方法可以执行此操作,因为命令参数不起作用,并且您不能使用查询字符串参数。

但是,尝试使用ClickOnce部署部署另一个小型可执行文件。它将负责设置“启动”标志(在配置文件,注册表中,无论如何),然后启动您的实际应用程序。您的应用程序将检查该标志以确定它是否应该以静默方式启动,然后重置该标志。然后你就可以从Windows而不是你的主应用程序开始使用小的可执行文件。

当然,我没有尝试过这些。

答案 1 :(得分:0)

你可以这样做:

在您的主要方法中:

if ((args.Length > 0 && args[0].ToLower() == "minimized") ||
    (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length > 0 &&
    AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0] == "minimized"))//ClickOnce arguments
{

    //My code to start minimized. My system tray is always visible
    main.WindowState = FormWindowState.Minimized;
    main.Hide();
    main.ShowInTaskbar = false;
}
else {

    //Code to start normally
    main.WindowState = FormWindowState.Normal;
    main.ShowInTaskbar = true;
    main.Show();
}

然后,您可以使用ClickOnce应用程序传递参数'minimize'以使其最小化。

要自动启动ClickOnce应用程序,我会创建一个这样的快捷方式:

CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.Programs) + @"\LVH Tools\MyMiniTools.appref-ms", Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\MyMiniTools", "minimized")

'MyMiniTools'是应用程序的名称,'LVH Tools'是发布者名称。

CreateShortcut:

    public void CreateShortcut(string destinationPath, string shortcutPath, string arguments = "")
    {
        IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();

        shortcutPath = Path.ChangeExtension(shortcutPath, "lnk");

        IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutPath);

        shortcut.TargetPath = destinationPath;
        shortcut.IconLocation = destinationPath;
        shortcut.Arguments = arguments;

        shortcut.Description = Path.GetFileNameWithoutExtension(destinationPath);

        shortcut.Save();
    }

ClickOnce application autostart and clean uninstall or the way to customize ClickOnce installation 中解释了使用ClickOnce启用自动启动的另一种方法。