2013-02-14 72 views
1

我已經啓動並運行了我的應用程序,但它似乎並不想通過ClickOnce正確安裝。它使用Powershell,我在我的應用程序文件中包含了Microsoft.Management.Infrastructure.DLL,Microsoft.Management.Infrastructure.Native.DLL和System.Management.Automation.DLL。我已經嘗試了所有這些方法(包括,先決條件,排除)。我也將它們複製到GAC中並手動複製到該文件夾​​中。另外,我讓他們複製本地。在C#應用程序中包含Powershell的最佳做法是什麼?

對於這一點,我跟着幾個指令,告訴我,我應該改變我的csproj文件中提及:

<Reference Include="Microsoft.Management.Infrastructure"/> 

每個引用。這樣,它實際上會在計算機上查找最新的DLL。

問題是,如果它們設置爲prereq,我會收到一條消息告訴我他們應該首先安裝在GAC中。如果將它們設置包括,我相信它複製文件,讓我的應用程序運行,但我得到...

「錯誤加載操作系統Windows PowerShell管理單元時發生。 請與Microsoft支持服務。」

現在,我已經縮小到不同版本的Powershell或自動化dll在不同的計算機上。整個應用程序在我的電腦上工作正常,但不在其他(某些)上。

所以!我不知道我是否提供了太多的細節,但是我希望發生的事情是爲我的應用程序簡單地複製所需的DLL或引用已存在的DLL(最好是後者)。

任何人都可以幫忙嗎?

回答

1

這些文件由PowerShell安裝。你不想在你的應用中安裝它們。您正在使用的安裝程序應提供一種「排除」這些依賴關係的方法。最好的辦法是檢查作爲自定義操作需要的PowerShell版本,然後在用戶不需要合適的PowerShell版本時通知用戶。

+0

有沒有辦法使用他們的PowerShell版本?我遇到的問題是無論如何,它總是尋找我的版本。我注意到今晚我的應用程序可以在任何Windows 8計算機上運行,​​但不是7,Vista或XP。我認爲... ...沒有額外的細節會尋找他們的版本,而不是我已經標記的版本。 – 2013-02-15 03:03:38

+0

在Windows 8上,PowerShell 3.0是默認設置。檢查您項目引用的System.Management.Automation的版本。如果它是3.0,那麼你的用戶需要PowerShell 3.0。我不確定Microsoft.Management.Infrastructure,但我認爲它可能只適用於PowerShell 3.0(它是針對.NET 4.0編譯的)。在這種情況下,安裝程序應檢查Windows 7和Windows Server 2008 SP2/R2 SP1上安裝的WMF 3.0。它在Vista或XP上不受支持。 http://www.microsoft.com/en-us/download/details.aspx?id=34595 – 2013-02-15 05:20:09

+0

我想現在我可以包括WMF 3.0,但現在呢,但未來呢?說下一個版本的Powershell不支持7.顯然我想保留7個支持一段時間(很多人會使用它很長一段時間)。是否仍然沒有辦法讓我的應用程序只引用他們擁有的任何版本的Powershell? – 2013-02-15 13:16:32

相關問題