2010-03-20 25 views
1

我的任務是使用瀏覽器應用程序編寫一個Silverlight安裝程序。我需要。Silverlight(SLOOB)即使在完全信任的情況下也能啓動一個過程嗎?

  1. 獲取版本關閉本地EXE
  2. 檢查Web服務,看看它是最新版本
  3. 下載
  4. 解壓ZIP
  5. 覆蓋舊的EXE一個zip如果不是
  6. 啓動EXE

這個安裝程序是.NET編寫的WinForms現在卜.NET框架是人們下載的障礙。

推薦的解決方案是使用SLOOB,但我不確定如何分配完全信任。如果我分配完全信任,我可以開始一個過程。

感謝

+0

安裝的應用程序是一個.NET應用程序?如果是這樣,.NET框架以什麼方式成爲安裝程序的障礙? – AnthonyWJones 2010-03-21 09:22:09

回答

1

展望這一點,我懷疑你將不得不通過創建COM接口使用WMI的過程。在這一天結束時,這使得這是一個非常困難的選擇,並且由於許多原因(WMI被禁用或被保護,用戶不會完全信任等等)而很容易失敗。我懷疑你會好得多關閉創建一個.msi部署包或類似的東西,如果有必要,可以出去下載框架。有很多可用的部署模型,幾乎所有的模型都比這個更優越。

這就是說,如果你要做到這一點:

要獲得COM對象,你將要使用的AutomationFactory.CreateObject(...) API。 Tim Heuer provides a sample here.

要實際執行WMI腳本,您需要創建WbemScripting.SWbemLocator對象作爲根。從那裏,使用ConnectServer方法在命名機器上獲得wmi服務。然後,您可以詢問Win32_Process模塊以創建新的進程。

編輯:我花了一點時間在這工作,甚至在我的本地計算機上,我遇到安全問題。正確的代碼將類似於:

 dynamic locatorService = AutomationFactory.CreateObject("WbemScripting.SWbemLocator"); 
     dynamic wmiService = locatorService.ConnectServer("winmgmts:{impersonationLevel=impersonate,authentationLevel=Pkt}//./root/cimv2"); 

     dynamic process = wmiService.Get("Win32_Process"); 

     dynamic createParameters = process.Methods_["Create"].InParameters.SpawnInstance_; 

     createParameters.CommandLine = "cmd.exe"; 

     wmiService.ExecMethod("Win32_Process", "Create", createParameters); 
相關問題