首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在静默运行时捕获dpinst的控制台输出?

如何在静默运行时捕获dpinst的控制台输出?
EN

Stack Overflow用户
提问于 2015-09-09 16:04:41
回答 2查看 2.3K关注 0票数 4

我有一个进程(用C#编写),它以管理权限运行,并调用dpinst.exe来执行自动驱动程序安装。它编写自己的自定义dpinst.xml文件来指定诸如关闭EULA页面、取消向导、运行“静音安装”以及在所有子目录中搜索之类的内容。

当我从命令行手动调用它(参见下面的示例)时,它似乎工作得很好。由于命令行开关,我使用它在控制台中打印了一堆信息级别的日志消息。

代码语言:javascript
复制
C:\Path\To\Drivers> dpinst.exe /C /L 0x409

我想记录控制台中打印的内容,所以我的C#代码如下所示:

代码语言:javascript
复制
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的值始终是空的。因此,在下一个实验中,我尝试直接使用命令行将输出输送到文件中,如下所示:

代码语言:javascript
复制
C:\Path\To\Drivers> dpinst.exe /C /L 0x409 > test.log 2>&1

它创建了test.log文件,但它也是空白的。有趣的是,我仍然可以看到dpinst.exe在同一个控制台窗口中生成的所有控制台输出;由于某种原因,它没有被重定向到我指定的文件。因此,无论我如何调用dpinst可执行文件,症状都是相同的;它不想重定向输出。我不知道这是什么根本原因,也不知道如何解决这个问题。如何捕获控制台输出?

编辑:--如果有人想在本地运行dpinst.exe的副本并测试自己,我已经使用了在这个链接上提供了一个,绑定了正在使用的dpinst.xml文件。请记住,您需要使用/C命令行开关调用它,以便生成任何命令行输出。或者,如果您疑神疑鬼,并且不想从某个随机堆栈溢出问题下载可执行文件,您可以从微软获得dpinst.exe实用程序作为视窗驱动套件的一部分。这是免费下载,但您必须从完整的WDK ISO (约700 MB)中提取实用程序(只有500 KB)。你说了算。:)

EN

回答 2

Stack Overflow用户

发布于 2015-09-09 16:20:44

例如,您的代码在标准工具(如"ping")中运行得非常好。那么,也许因为某种原因,dpinst会写到标准错误中吗?您可以设置RedirectStandardError = true,并读取StandardError以检查是否是这种情况。

更新,以防其他人遇到此问题:

似乎dpinst不写入标准输出,而是以其他方式将消息记录到控制台。实现你的目标的唯一方法是:记住"%SystemRoot%\DPINST.LOG“文件的大小,运行命令,等待退出,然后读取记忆中的位置和文件结束之间的所有内容。这样你就能拿到你的日志了。

票数 1
EN

Stack Overflow用户

发布于 2018-08-29 20:41:35

我的回答会帮助其他人。当您运行"C:\Windows\DPINST.LOG“并添加swicth /C以将日志转储到控制台时,它还会在此目录/C中创建一个日志文件。

你可以在那里找到日志文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32484379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档