.net 子进程中使用的DLL中PID的奇怪行为?
我正在Win7上使用C++/CLI、.net 4.5、VS2012进行编码 我有一个主进程a.exe,它使用System::Diagnostics::process(::Start())启动第二个进程B.exe 第二个进程B.exe使用(本机)DLLC.DLL 在C.dll中,我声明了一个静态文件,如下所示:.net 子进程中使用的DLL中PID的奇怪行为?,.net,windows,dll,c++-cli,pid,.net,Windows,Dll,C++ Cli,Pid,我正在Win7上使用C++/CLI、.net 4.5、VS2012进行编码 我有一个主进程a.exe,它使用System::Diagnostics::process(::Start())启动第二个进程B.exe 第二个进程B.exe使用(本机)DLLC.DLL 在C.dll中,我声明了一个静态文件,如下所示: static bool B = true; if(B == true ) { MyFile << "Switch true to false" << end
static bool B = true;
if(B == true )
{
MyFile << "Switch true to false" << endl;
B=false;
}
MyFile << _getpid() << endl;
其他字段保留其默认值
有人能帮我吗
谢谢
更新1
最后,A.exe和B.exe都加载C.dll。但问题仍然存在:DLL中的静态变量不应该映射两次吗,每个可执行文件映射一次吗????当我调用编写PID的函数时,它来自B.exe,因为在这段时间,A.exe等待B.exe完成。你确定看到了你认为看到的,你能用Process Explorer检查运行时的行为吗?另外,Process Explorer可以在两个进程中显示加载的模块,只是作为额外的健全性检查推荐。和你一样,我也不确定!因此,我在ProcessExplorer中进行了验证,并准确地看到了我所说的:A.exe是B.exe的父级,C.dll返回的PID是A.exe的PID!好的,请参阅问题中的更新1。所有进程是否都写入同一个文件?如果是这样的话,可能有些实例由于未处理的文件访问异常而提前终止。这也许可以解释这些奇怪的观察结果。
StartProcessInfo.UseShellExecute = false;
StartProcessInfo.CreateNoWindow = true;