【发布时间】:2020-09-18 14:32:45
【问题描述】:
我有一个问题,我试图通过 MSI 安装程序部署驱动程序安装,它包含 .CAT 和 .INF 文件并将它们输出到一个目录,通常基础架构工程师可以从这里右键单击 .INF文件并按安装,但我们正在尝试简化此过程并自动执行此步骤。
通过 C#,我有一个类利用 System.Diagnostics.Process 命名空间来生成一个 powershell 进程来运行一个包含如下简单命令的 powershell 脚本:
var process = new System.Diagnostics.Process();
var newProcessInfo = new System.Diagnostics.ProcessStartInfo();
string powerShellScript = @"C:\PowershellScript\DriverInstall.ps1"
newProcessInfo.FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
newProcessInfo.Verb = "runas";
string newArgs = "-File " + powerShellScript;
newProcessInfo.Arguments = newArgs;
process.StartInfo = newProcessInfo;
process.Start();
Powershell脚本命令如下:
Get-ChildItem "C:\DriverLocation" -Recurse -Filter "*inf" | ForEach-Object {PNPUtil.exe /add-driver $_.FullName /install }
从 powershell 运行它时,它按预期工作,但是如果我尝试从 C# 类生成一个 powershell 进程,它不起作用,会出现一些红色错误消息文本,但进程窗口会立即生成并关闭,所以我无法确定错误是什么。
基本上,我要么需要将 powershell 进程的输出输出到文本文件,要么需要保留 powershell 窗口,这样我才能确定从 System.Diagnostics.Process 命名空间运行时脚本为何无法工作。
我已尝试编辑注册表,以便 powershell 将保持打开状态,但无济于事。
请不要建议使用 System.Management.Automation.Powershell 命名空间,因为在我们的项目场景中无法使用 .NET 核心。
感谢您花时间阅读本文,非常感谢您的帮助。
【问题讨论】:
-
power shell 脚本必须与 c# 可执行文件位于同一文件夹中,否则您需要脚本的路径:string newArgs = "-File" + powerShellScript;
-
我现在已经添加了 powershell 脚本路径,我省略了这一行,因为我认为没有必要回答这个问题。
-
调试打开一个 cmd.exe 窗口。使用 cmd/K 可执行文件。大写的 K 选项在可执行文件终止后保持窗口打开,以便您可以阅读错误。我怀疑缺少环境变量。
-
我将如何实现 dev/null?
-
在我们的项目场景中无法使用 .NET 内核,我们只在 Windows 上运行,因此恐怕 Unix/Linux 是不可能的。
标签: c# .net powershell installation windows-installer