【问题标题】:Tracking multiple processes at same time同时跟踪多个进程
【发布时间】:2011-04-29 12:11:55
【问题描述】:


我有一个应用程序(winforms)将文件下载到用户的临时文件夹,然后打开文件供用户查看内容,当文件关闭时,文件将从临时文件夹中删除。如果我打开一个 .pdf 和一个 .doc 应用程序运行正常 如果另一个 winword 进程仍在运行,则在尝试打开一个 .doc 时出现问题(不管是由我的应用程序打开还是由用户直接打开) .

我正在使用以下代码:

_OpenFileProces = System.Diagnostics.Process.Start(TempFileName);
_OpenFileProces.EnableRaisingEvents = true;
_OpenFileProces.Exited += new EventHandler(_OpenFileProces_Exited);

这个是清除温度的

void _OpenFileProces_Exited(object sender, EventArgs e)
    {
        string s = ((System.Diagnostics.Process)sender).StartInfo.FileName;
        System.IO.File.Delete(s);
    }

似乎正在运行的进程正在停止我自己的进程。由于停止它会删除文件,或者在尝试删除文件时会产生错误。
您对我如何打开自己的流程有什么建议吗?问题是我不知道我必须打开什么文件类型(它可以是任何东西),我指望 Windows 来选择最好的应用程序。根据我的测试,记事本工作正常,但 winword 和 acrobat 关闭了我的进程。
谢谢

【问题讨论】:

    标签: c# .net windows process process.start


    【解决方案1】:

    我怀疑 Microsoft Word 在这里所做的事情与 Raymond Chen 将 Windows Shell 描述为 here 所做的完全一样:

    一位客户在监控资源管理器窗口的生命周期方面需要帮助。

    "我们想要启动资源管理器的副本以打开特定文件夹,然后等到用户关闭该文件夹后再继续。我们尝试在命令行上启动包含该文件夹的资源管理器副本,然后执行进程句柄上的WaitForSingleObject,但有时等待不等待就立即完成。我们如何等到用户关闭资源管理器窗口?"

    这又是一个半路解决问题,另一半又遇到麻烦的情况。

    Wait­For­Single­Object 立即返回的原因是 Explorer 是一个单实例程序(嗯,有限实例)。当您打开资源管理器窗口时,请求将移交给资源管理器的运行副本,并且您启动的资源管理器副本退出。这就是您的Wait­For­Single­Object 立即返回的原因。

    在您的情况下,Word 已经在运行,因此当您创建一个 Word 进程并指示它打开您的文档时,它只是将请求交给已经运行的 Word 实例,并立即退出您启动的第二个进程。

    当您描述“正在运行的进程正在停止我自己的进程”时,这就是您所看到的。因为第二个实例在您启动后立即关闭,所以会引发 Exited 事件并且您的代码会告诉它删除文件!

    您敏锐地观察到记事本(与 Word 和 Adob​​e Acrobat 不同)工作得很好。那是因为记事本被设计成一个多实例应用程序。您可以根据需要打开任意数量的记事本;它不在乎桌面上是否已经打开了 1 个或 6 个副本。更重要的是,要求 shell 在记事本中打开文本文档实际上会打开记事本应用程序的 second 副本,而不是向 first 实例发送打开一个新文档的新窗口。

    【讨论】:

    • 谢谢!!!我想我会选择另一种清除临时文件的方法。
    【解决方案2】:

    您应该在开始该过程之前将 Process.StartInfo.UseShellExecute 设置为 true 像这样 _OpenFileProces.StartInfo.UseShellExecute = true; 然后我认为它应该可以工作......

    【讨论】:

    • 嗨,设置该属性没有任何区别,我看到 true 是默认值。无论如何,谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2014-08-09
    • 2014-08-22
    相关资源
    最近更新 更多