什么';在C#应用程序中包含Powershell的最佳实践是什么?

什么';在C#应用程序中包含Powershell的最佳实践是什么?,c#,powershell,office365,C#,Powershell,Office365,我已经启动并运行了我的应用程序,但它似乎不想通过ClickOnce正确安装。它使用Powershell,我在应用程序文件中包括了Microsoft.Management.Infrastructure.DLL、Microsoft.Management.Infrastructure.Native.DLL和System.Management.Automation.DLL。我从各个方面都试过了(包括、先决条件、排除)。我还通过将它们从GAC复制到该文件夹中,将它们手动复制到我的参考资料中。此外,我已将它

我已经启动并运行了我的应用程序,但它似乎不想通过ClickOnce正确安装。它使用Powershell,我在应用程序文件中包括了Microsoft.Management.Infrastructure.DLL、Microsoft.Management.Infrastructure.Native.DLL和System.Management.Automation.DLL。我从各个方面都试过了(包括、先决条件、排除)。我还通过将它们从GAC复制到该文件夹中,将它们手动复制到我的参考资料中。此外,我已将它们设置为复制本地

为此,我按照几条说明将csproj文件中的引用更改为:

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

对于每个引用。这样,它实际上可以在计算机上查找最新的DLL

问题是,如果它们被设置为prereqs,我会收到一条消息,告诉我它们应该首先安装在GAC中。如果它们设置为包含,我相信它会复制文件,让我的应用程序运行,但我得到

“加载系统Windows PowerShell管理单元时出错。 请与Microsoft支持服务部门联系。“

现在,我已经将范围缩小到不同版本的Powershell或不同计算机上的Automations DLL。整个应用程序在我的计算机上运行良好,但在(某些)其他计算机上运行不正常

所以!我不知道我是否给出了太多的细节,但我希望我的应用程序能够简单地复制所需的DLL或已经存在的引用DLL(最好是后者)


有人能帮忙吗?

这些文件是由PowerShell安装的。您不想在应用程序中安装它们。您正在使用的安装程序应该提供一种“排除”这些依赖项的方法。您最好检查自定义操作所需的PowerShell版本,然后在用户不需要相应版本的PowerShell时提醒用户。

这些文件由PowerShell安装。您不想在应用程序中安装它们。您正在使用的安装程序应该提供一种“排除”这些依赖项的方法。您最好检查自定义操作所需的PowerShell版本,然后在用户不需要相应版本的PowerShell时提醒用户。

是否有方法使用他们的PowerShell版本?我遇到的问题是,不管怎样,它总是寻找我的版本。今晚我注意到我的应用程序可以在任何Windows8计算机上运行,但不能在Windows7、Vista或XP上运行。我以为。。。如果没有额外的详细信息,将查找他们的版本,而不是我标记的版本。在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不支持它。我想现在我可以包括WMF3.0,但将来呢?假设下一版本的Powershell不支持7。显然,我想保持7支持一段时间(很多人会使用它很长时间)。现在还没有办法让我的应用程序只引用他们拥有的任何版本的Powershell吗?正式来说,没有。像Exunge Server IIRC这样的产品甚至需要Powershell/WMF作为安装的前提条件。一些人已经能够挑选出他们的程序所需要的所有单个部分,但是这种方法在我看来充满了危险。所以我想我不应该相信我在网上看到的一切:P谢谢!我会让我的应用程序与Windows 7+8兼容,至少现在是这样。有没有办法使用他们的PowerShell版本?我遇到的问题是,不管怎样,它总是寻找我的版本。今晚我注意到我的应用程序可以在任何Windows8计算机上运行,但不能在Windows7、Vista或XP上运行。我以为。。。如果没有额外的详细信息,将查找他们的版本,而不是我标记的版本。在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不支持它。我想现在我可以包括WMF3.0,但将来呢?假设下一版本的Powershell不支持7。显然,我想保持7支持一段时间(很多人会使用它很长时间)。现在还没有办法让我的应用程序只引用他们拥有的任何版本的Powershell吗?正式来说,没有。像Exunge Server IIRC这样的产品甚至需要Powershell/WMF作为安装的前提条件。一些人已经能够挑选出他们的程序所需要的所有单个部分,但是这种方法在我看来充满了危险。所以我想我不应该相信我在网上看到的一切:P谢谢!我会让我的应用程序与Windows7+8兼容,至少现在是这样。