我有一个使用ClickOnce进行部署的应用程序,我已设法在用户登录时启动应用程序。
我的问题是我需要启动隐藏的应用程序(我不希望用户在需要它之前必须将其最小化 - 我希望它放在系统托盘中)。在使用ClickOnce之前,我只是检查参数以查看是否传入了“/ silent”。似乎无法在ClickOnce应用程序中执行此操作(您可以检查是否传入了URI查询字符串,但是因为这是从.appref-ms快捷方式运行似乎无法获取/silent
参数)
如何获取/silent
参数,或者如何判断应用程序是否因用户登录而启动(而不是用户从快捷方式启动应用程序)?
重要的是,无论提出什么解决方案都不需要管理员权限,但使用的语言并不像我可能将其移植到.NET那么重要。
答案 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启用自动启动的另一种方法。