我从WinForms应用程序调用了以下函数。该函数位于主窗体本身中。当我(以提升的权限)运行程序时,脚本被调用,但应用程序池没有被创建。
调用PowerShell脚本的其他几个方法运行良好,特别是那些调用我自己构建的自定义模块的方法。我遇到困难的脚本(如下面的脚本)是那些在Windows本身中修改项目的脚本,例如IIS或创建注册表项。
public void PSSetupIIS(string baseDirectory, IISInfo iisInfo)
{
var results = new List<string>();
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
using (PowerShell psInstance = PowerShell.Create())
{
psInstance.Runspace = runspace;
psInstance.AddCommand("Import-Module").AddArgument("Web-Administration");
psInstance.AddStatement();
var addWebAppPool = new Command("New-WebAppPool");
addWebAppPool.Parameters.Add("Name", iisInfo.AppPoolName);
addWebAppPool.Parameters.Add("Verbose");
addWebAppPool.MergeMyResults(PipelineResultTypes.All, PipelineResultTypes.Output);
psInstance.Commands.AddCommand(addWebAppPool);
psInstance.Commands.AddCommand("Out-String");
psInstance.AddStatement();
results.AddRange(psInstance.Invoke<string>());
}
foreach (var result in results)
{
this.AppendOutput(result);
}
runspace.Close();
}
this.AppendOutput("IIS Configuration Complete.");
}我尝试过编写脚本和使用psInstance.AddScript,并得到了相同的结果(尽管在提升的PowerShell实例中运行相同的脚本时,它工作得很好)。我还试图让runspace提示输入凭据,但根本不起作用。
此方法是一个更大的项目的一部分,该项目使用PowerShell安装我们公司的web应用程序。它是一个具有多个配置文件的复杂安装,并且已经发展到不能简单地使用Wix或InstallShield进行维护的能力。我使用WinForms项目来创建一个PSD1数据源,所有必需的脚本都会使用该数据源。
我有一个有效的PowerShell脚本,当从PowerShell控制台使用生成的PSD1文件运行时,它可以很好地完成安装。尝试从UI运行只是为了平滑安装程序的用户体验。
我正在使用PowerShell和C#来尝试和保持我们的开发团队和那些将使用该项目的人都可以使用的技术,并尝试遵循微软设置的通用示例。我知道服务器管理器在幕后使用PowerShell。
有什么建议吗?
发布于 2017-08-25 23:06:09
答案是我需要为winforms应用程序创建一个清单。第一个关键字在this question on Microsoft Developer Network中,在Manifest Generation in Visual Studio页面中有更多后续内容,以获得更多指导。
https://stackoverflow.com/questions/45828381
复制相似问题