2009-07-16 85 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

相關問題