2009-07-16 76 views
1

我有一个使用ClickOnce部署应用程序,我已经成功地获取应用程序启动时,用户登录。在静音模式下自动启动ClickOnce应用程序

我的问题是我需要的应用程序启动隐藏(我不希望用户必须将其最小化,直到他们需要它 - 我希望它坐在系统托盘中)。在使用ClickOnce之前,我只是简单地检查参数以查看是否传入了“/ silent”。在ClickOnce应用程序中似乎没有办法做到这一点(您可以检查是否传入了URI查询字符串,但是因为这是从.appref-ms快捷方式运行似乎没有办法获得/silent参数)

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

无论提出哪种解决方案都不需要管理员权限,但使用的语言并不像我可以将它移植到.NET一样重要,这一点很重要。

回答

0

我不认为有一个很干净的方法来做到这一点,因为命令参数不起作用,并且你不能使用查询字符串参数。

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

当然,我没有尝试过任何这一点。

+0

这就是我正在做的计划 - 无法找到更好的方法! (如果你这样做,记得在每次升级后更新帮助程序的快捷方式)。 感谢您确认这是发生了什么! – 2009-07-18 10:28:32

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应用程序来启动它最小化。

要开始我的ClickOnce应用程序自动,我做出这样的快捷方式:

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

“MyMiniTools”是应用程序的名称,和“左心室肥厚工具”是出版商的名称。

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在ClickOnce application autostart and clean uninstall or the way to customize ClickOnce installation进行说明。

+0

当路径将被更改时,此句柄如何更新? – 2013-05-21 19:54:55

相关问题