2010-06-02 172 views
3

我打算構建一個下載管理器應用程序,並希望能夠在用戶單擊該網站按鈕時啓動該應用程序。該應用程序顯然已經需要安裝在客戶端機器上。是否可以從網頁啓動Silverlight 4 OOB應用程序?

有幾個原因需要使用Silverlight編寫,但它們與問題無關。我只提到它,以便人們不會建議我使用其他技術。

回答

2

我想根據這個帖子post 1和其他post這是不可能的。 但我不知道是否MS將改變,在SL 4

0
+0

謝謝回答。解決方案不是我正在尋找的。它只顯示你已經安裝了這個應用程序,請從你的快捷方式啓動它。要卸載/重新安裝,請右鍵單擊此處並選擇「刪除此應用程序...」。我想要做的是OOB應用程序在用戶點擊網頁上的按鈕或在瀏覽器中運行的應用程序時啓動。 – marcnicol 2010-06-02 15:21:55

+0

這是因爲你已經安裝了應用程序。 您可以創建一個SL應用程序,在瀏覽器中只顯示安裝按鈕,但在運行OOB時顯示完整的用戶界面。 – 2010-06-02 15:43:35

+0

我想啓動已安裝的應用程序。 – marcnicol 2010-06-02 15:54:25

1

的最後一個版本來自另外兩個職位[1]和[2]這樣做有點混搭的了。

但當然這隻適用於Windows而不適用於Mac。在那裏你必須回退到@michael-s-scherotter風格的解決方案。

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    if (Application.Current.HasElevatedPermissions && System.Windows.Interop.ComAutomationFactory.IsAvailable) 
    { 

     string run = "\""%ProgramFiles%\\Microsoft Silverlight\\sllauncher.exe"\" /emulate:"Silverface.xap" /origin:\"http://www.silverlight.net/content/samples/apps/facebookclient/ClientBin/Silverface.xap\" /overwrite"; 
     dynamic cmd = ComAutomationFactory.CreateObject("WScript.Shell"); 
     cmd.Run(run, 1, true); 

    } 
} 
0

我發現,在瀏覽器的Silverlight應用程序啓動安裝了Silverlight OOB一招。這兩個應用程序應該被燒錄並且具有較高的信任度。

  1. 當用戶第一次安裝Silverlight OOB App時,從桌面上的OOB應用程序的快捷方式文件中檢索路徑和參數值。 (ref:How I can use Shell32.dll in Silverlight OOB)如果您知道路徑和參數值,則可以使用Com對象啓動OOB應用程序。
  2. 將路徑和參數值發送給瀏覽器中的silverlight應用程序。 (ref:http://msdn.microsoft.com/en-us/library/dd833063(v=vs.95).aspx
  3. 將路徑和參數值存儲在cookie中。
  4. 現在,瀏覽器中的silverlight應用程序能夠使用cookie中的路徑和參數值啓動silverlight OOB。

using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell")) 
{ 
    shell.Run(launchPath); 
} 

我希望這招對你有用:)

0

,如果你同意給每個用戶點擊它時安裝的應用程序這是可能的。

您還應該設置應用程序以在其OOB設置中要求提升信任度。

只需卸載在啓動應用程序(例如,在主窗口的構造函數):

if (Application.Current.HasElevatedPermissions && Application.Current.InstallState == InstallState.Installed) 
{ 
    string launcherPath = string.Empty; 
    using (dynamic shell = AutomationFactory.CreateObject("Shell.Application")) 
    { 
     string launcher64 = @"C:\Program Files (x86)\Microsoft Silverlight"; 
     string launcher32 = @"C:\Program Files\Microsoft Silverlight"; 

     dynamic folder64 = shell.NameSpace(launcher64); 
     if (folder64 != null) 
     { 
      launcherPath = launcher64; 
     } 
     else 
     { 
      dynamic folder32 = shell.NameSpace(launcher32); 
      if (folder32 != null) 
      { 
       launcherPath = launcher32; 
      } 
     } 
    } 

    using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell")) 
    { 
     var origin = Application.Current.Host.Source.OriginalString; 
     var launchCmd = string.Format(@"""{0}\sllauncher.exe"" /uninstall /origin:""{1}""", launcherPath, origin); 
     shell.Run(launchCmd); 
    } 
} 

(用於卸載的代碼是從這個帖子採取:http://www.wintellect.com/blogs/sloscialo/programmatically-uninstalling-silverlight-out-of-browser-application

相關問題