1

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

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

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

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

4

2 回答 2

1

你可以这样做:

在您的主要方法中:

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 应用程序传递“最小化”参数以将其最小化。

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

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

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

创建快捷方式:

    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 启用自动启动的方法在ClickOnce 应用程序自动启动和完全卸载或自定义 ClickOnce 安装的方式中进行了说明。

于 2013-05-21T15:20:17.460 回答
0

我认为没有一种非常干净的方法可以做到这一点,因为命令参数不起作用,而且您不能使用查询字符串参数。

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

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

于 2009-07-17T13:51:24.507 回答