我正在尝试弄清楚为什么我编写的 NPAPI 插件(在执行通过 Javascipt 调用触发的操作方面工作正常)无法使用 CreateProcess() 或 ShellExecute() 从通过 Javascript 调用指定的路径启动应用程序。

我似乎可以使用这些方法中的任何一种,并且它们返回成功,即没有错误代码。但该应用程序就是不启动。我尝试修改调用它们时使用的参数,以创建新的进程组等。但貌似没有什么效果。

我知道这可能看起来有点安全风险,但出于我们希望使用它的特定目的,它应该不成问题。

使用Windows XP Pro SP3、Firefox 3.5和以下代码:

ZeroMemory( &si, sizeof(si) ); 
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) ); 
if( CreateProcess( NULL, wFileName, NULL, NULL, FALSE, 
                  CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, 
                  NULL, NULL, &si, &pi ) )
{ 
    bSuccess = true; // Close process and thread handles.      
    WaitForSingleObject(pi.hProcess,INFINITE); 
    CloseHandle( pi.hProcess ); 
    CloseHandle( pi.hThread ); 
}
有帮助吗?

解决方案

没有任何代码(片段)可供咀嚼,真的很难给出有价值的提示:

我不明白为什么这在 XP 上不起作用。您确定 CreateProcess()/ShellExecute() 调用成功吗?

值得尝试的事情:

  • 如果传递无效路径,ShellExecute() 调用也会成功吗?

  • 如果您使用硬编码路径(例如notepad.exe 的路径、不带空格的路径等)?

  • 检查 ProcessMonitor(以前的 filemon)是否访问了您尝试启动的应用程序的可执行文件。

可执行文件可能无法启动,因为找不到依赖的 DLL。
请记住,工作/当前目录是从插件内启动应用程序时浏览器可执行文件的目录。
因此,可能找不到位于应用程序文件夹中的 DLL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top