以静默模式自动启动 ClickOnce 应用程序
题
我有一个使用的应用程序 单击一次 进行部署,并且我已设法在用户登录时启动应用程序。
我的问题是我需要应用程序以隐藏方式启动(我不希望用户必须将其最小化,直到他们需要它 - 我希望它位于系统托盘中)。在使用 ClickOnce 之前,我只是检查参数以查看是否传入了“/silent”。在 ClickOnce 应用程序中似乎无法执行此操作(您可以检查是否传入了 URI 查询字符串,但由于这是从 .appref-ms 快捷方式运行,因此似乎无法获取 /silent
争论)
我怎样才能得到 /silent
参数,或者如何判断应用程序是否由于用户登录而启动(而不是用户从快捷方式启动应用程序)?
重要的是,无论提出什么解决方案都不需要管理员权限,但使用的语言并不重要,重要的是我可以将其移植到 .NET。
解决方案
我不认为有一个非常干净的方式来做到这一点,因为命令参数不工作,你不能使用查询字符串参数。
然而,尝试用你的ClickOnce部署部署另一个小的可执行文件。这将是负责制定一个“启动”标志(在配置文件,注册表等等),然后启动实际的应用程序。您的应用程序会检查标志,以确定是否应该悄悄推出,然后复位标志。然后,你就只是有小的可执行文件开始使用Windows,而不是主应用程序。
当然,我并没有这条老命了。
其他提示
你可以这样做:
在您的主要方法中:
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 安装的方式.