我从WinForms应用程序调用了以下函数。该函数位于Main表单中。当我运行程序(具有提升的权限)时,将调用脚本,但不会创建应用程序池。
调用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实例中运行相同的脚本时,它可以正常工作)。我还试图获得凭据的运行空间提示,但这根本不起作用。
此方法是使用PowerShell安装公司Web应用程序的大型项目的一部分。这是一个包含多个配置文件的复杂安装,并且已经超出了使用Wix或InstallShield简单维护的能力。我使用WinForms项目来创建一个由所有必需脚本使用的PSD1数据源。
我有一个有效的PowerShell脚本,可以从使用生成的PSD1文件的PowerShell控制台运行时很好地完成安装。尝试从UI运行只是为了平滑安装程序的用户体验。
我正在使用PowerShell和C#来尝试使用我们的开发团队和将要使用该项目的人员可访问的技术,并尝试遵循Microsoft设置的一般示例。我知道服务器管理器使用PowerShell。
任何指导?
答案 0 :(得分:0)
答案结果是我需要为winforms应用程序创建一个清单。第一个密钥位于this question on Microsoft Developer Network,并在Manifest Generation in Visual Studio页面中进行了其他跟进,以获得更多指导。