我有一个以管理权限运行并调用dpinst.exe来执行自动驱动程序安装的进程(用 C# 编写)。它编写自己的自定义 dpinst.xml 文件来指定诸如禁止 EULA 页面、禁止向导、运行“安静安装”以及在所有子目录中搜索等内容。
当我从命令行手动调用它时(参见下面的示例),它似乎工作正常。由于我正在使用命令行开关,它会在控制台中打印一堆 INFO 级别的日志消息。
C:\Path\To\Drivers> dpinst.exe /C /L 0x409
我想记录控制台中打印的内容,所以我的 C# 代码如下所示:
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = @"C:\Path\To\Drivers\dpinst.exe",
Arguments = "/C /L 0x409",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true,
Verb = "runas"
}
};
string output;
process.Start();
using (var reader = process.StandardOutput)
{
output = reader.ReadToEnd();
reader.Close();
}
但是,当我运行该代码时, 的值output
始终为空。因此,对于我的下一个实验,我尝试直接使用命令行将输出通过管道传输到文件,如下所示:
C:\Path\To\Drivers> dpinst.exe /C /L 0x409 > test.log 2>&1
这创建了 test.log 文件,但它也是空白的。有趣的是,我仍然可以在同一个控制台窗口中看到 dpinst.exe 生成的所有控制台输出;由于某种原因,它没有被重定向到我指定的文件。因此,无论我如何调用 dpinst 可执行文件,症状都是相同的;它不想重定向输出。我不确定其根本原因是什么,也不知道如何解决。如何捕获控制台输出?
编辑:如果有人想要 dpinst.exe 的副本在本地运行并测试自己,我在这个链接上提供了一个,与我正在使用的 dpinst.xml 文件捆绑在一起。请记住,您需要使用/C
命令行开关调用它才能生成任何命令行输出。或者,如果您偏执并且不想从一些随机的 Stack Overflow 问题中下载可执行文件,您可以从 Microsoft获取 dpinst.exe 实用程序作为Windows 驱动程序工具包的一部分。它是免费下载的,但您必须从完整的 WDK ISO(大约 700 MB)中提取实用程序(只有 500 KB)。由你决定。:)