2013-02-14 77 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

相关问题