Process.start() 启动的进程返回错误的进程 ID?

2024-03-08

我正在使用以下代码启动可执行文件:

Process proc = new Process();
proc.StartInfo.FileName = executablePath;
proc.Start();
proc.WaitForInputIdle();

在这次通话之后proc.Id它给了我一些整数,这不是真正的进程ID。在任务管理器中,此进程有另一个 ID,而且我正在使用 MS UI 自动化来访问此应用程序,它也返回与任务管理器中相同的 ID。所以我的问题是如何获取启动进程的真实进程ID?

UPDATE

我发现在 Windows 7 上它工作正常并返回正确的 ID,但在 Windows XP 上却不行。可能是什么原因?

SCENARIO

应用场景如下。我有一个正在运行的嵌入式 HTTP 服务器,它不是由我实现的,(here http://www.codeproject.com/Articles/20445/C-Customizable-Embedded-HTTPServer是来源)。客户端连接到 Web 服务器并发送运行程序的请求。在我的服务器的请求处理程序中我只是使用Process.start()启动所请求的应用程序。作为一个网络服务器,程序为连接到它的每个客户端会话创建线程(我假设是这样,因为我没有编写它)。这能否以某种方式帮助识别该问题,因为该问题仅存在于 Windows XP X86 Service Pack 3 上?


我是如何做到的的一个例子:

    bool started = false;
    var p = new Process();

    p.StartInfo.FileName = "notepad.exe";

    started = p.Start();

    try {
      var procId = p.Id;
      Console.WriteLine("ID: " + procId);
    }
    catch(InvalidOperationException)
    {
        started = false;
    }
    catch(Exception ex)
    {
        started = false;
    }

否则,尝试使用这样的句柄:
使用处理程序 https://stackoverflow.com/questions/1283564/unable-to-extract-processid-from-getprocessid-hwnd-pinvoke
获取处理程序 https://stackoverflow.com/questions/1421166/c-sharp-get-window-handle-after-starting-a-process

hWnd = (int) process.MainWindowHandle;
int processId;
GetWindowThreadProcessId(hWnd, out processId);

[DllImport("user32")]
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int processId);

边注:
如果获取进程数组并迭代它们并比较 PID,会发生什么?

Process[] p = Process.GetProcessesByName( "testprogram" );
foreach(var proc in p)
    Console.WriteLine("Found: "+proc.Id == myExpectedProcId);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Process.start() 启动的进程返回错误的进程 ID? 的相关文章

随机推荐

  • 如何将附加行为添加到 CollectionViewSource 中?

    我正在尝试向 CollectionViewSource 添加附加行为 以便可以在 XAML 中的视图模型上提供过滤器 Predicate 属性 XAML 如下所示
  • d3.slider 和在时间轴上过滤的日期

    I have this example http bl ocks org cmdoptesc fc0e318ce7992bed7ca8 where some points get spawned over time with a slide
  • CSS 中更智能的分词?

    如果我只是把word break break all在一个元素上 我经常会得到这样的结果 大家好 我正在输入一条消息圣人太长了 不适合 显然这会好得多 因为 大家好 我正在输入消息太长 无法容纳 但同时如果有人写 啊啊啊啊啊啊啊啊啊啊啊啊啊
  • 摆脱一生的限制?

    我正在尝试编写一个 Rust 函数 它将输入从一个生命周期约束转换为具有全局生命周期约束的相同类型的输出 概念上类似于unsafe fn foo lt a T1 T2 gt x T1 gt T2 where T1 a T2 T1 stati
  • 黄瓜报告缺少报告结果 - 报告未成功完成

    我使用 Cucumber Reports 插件在管道作业中获取 Cucumber 报告 以前工作正常 但现在出现此错误 CucumberReport Preparing Cucumber Reports CucumberReport JSO
  • 闪亮:无法在闪亮数据表中设置列宽

    我对 Shiny 和 DataTables 还很陌生 所以这可能是一个愚蠢的问题 由于某种原因我无法更改列宽 我试过 output table lt DT renderDataTable withProgress message Compi
  • 在 SQL Server 中,如何将 ROW_Number() 与子查询列一起使用?

    这是我的查询 DECLARE StartRow INT DECLARE PageSize INT SET StartRow 1 SET PageSize 5 SELECT ContractID Property FROM SELECT c
  • Notepad++ 可以配置为识别编译器错误消息并跳转到相应的位置吗?

    我正在一台没有 IDE 但使用 Notepad 的机器上构建一些相当大的代码 编译结果被重定向到一个文件 有时会有错误消息 满足定义良好的正则表达式 我想知道 NPP 是否有一个插件 它可以解析日志文件 识别错误 警告消息 并让我在相应的错
  • 如何使 require() 采取文件的直接路径

    所以我有以下代码 问题是当我循环遍历数组中的每个文件并尝试要求文件路径时 它给我一个找不到模块的错误 local Commands function getCommands local readdir fs readdir local re
  • kubectl:来自服务器的错误:当前没有打开 SSH 隧道

    我正在 Google Container Engine 上运行一些容器 有一天一切都很好 第二天就不行了attach不再到我的容器了 或者exec 或任何其他 docker 命令 我删除了 Pod 并让新的 Pod 实例化 但没有帮助 然后
  • JavaScript 中自定义类似数组的 getter

    我有一个简单的 ES6 类 如下所示 class Ring extends Array insert item index this splice index 0 item return this 我想让 Ring 对象的索引换行 这样ne
  • 为什么 F# 编译器对一种情况给出错误,而对另一种情况则不给出错误?

    我正在处理来自 F 的平台调用 并且收到一个编译器错误 我真的无法理解 首先 让我展示一下我正在做的事情的 C 签名 int Foo ULONG PTR phHandle DWORD flags 在 F 中 我认为本地调用它的正确方法如下
  • 如何使 fitBounds 感知自定义控件

    我的谷歌地图左侧有一个大型 300 500px 自定义控件 我将我的标记聚集在一起 当用户单击标记时 我想放大地图以显示该群集中的标记 问题是 当我得到标记集合的边界时 然后map fitBounds collection bounds 我
  • 如何在 Rake 任务中执行命令?

    我的 Rails 应用程序中有 rake 任务 我想在 rake 任务中运行命令行命令 我怎样才能做到这一点 我尝试了以下方法但失败了 desc Sending the newsletter to all the users task se
  • 如何从框架中获取用户输入并保存到txt文件中?

    我的程序运行如下 我有一个带有添加按钮 保存按钮和选项卡控件的表单 当单击表单中的添加按钮时 选项卡控件将添加更多选项卡项目 tabitem 基本上是从 myframe 添加的 其中包括用户在 TEdit 中键入的值 我想要实现的是当我点击
  • 如何在 RxJava 中延迟地从列表中发出项目?

    我正在使用 Retrofit 从 REST API 获取书签 public interface BookmarkService GET bookmarks Observable
  • UiWebView 委托方法未被调用

    我正在尝试在 webView 中播放 youtube 嵌入视频 当我未设置委托时它会播放 并且如果我设置委托视频不会加载 并且委托方法也不会被调用 这是我的代码 m class import EmbeddedVideoVC h interf
  • 数组之间的交集索引

    是否有一种快速方法可以将数组的每个元素与唯一标识符列表中的每个元素进行比较 使用 for 循环来遍历每个唯一值是可行的 但速度太慢而无法使用 我一直在寻找矢量化解决方案 但没有成功 任何帮助将不胜感激 arrStart startRavel
  • http 错误 403.14-禁止

    我成功地将我的测试 html 页面托管在iis8 当我尝试托管已经创建的网站时 我得到了http错误 403 14 禁止 即使我将默认文档设置为具有框架的起始 html 页面 该网站有几个文件夹内部文件夹 当我启用目录浏览时 它将列出该页面
  • Process.start() 启动的进程返回错误的进程 ID?

    我正在使用以下代码启动可执行文件 Process proc new Process proc StartInfo FileName executablePath proc Start proc WaitForInputIdle 在这次通话之