Winapi 从NPAPI插件中启动外部应用程序

Winapi 从NPAPI插件中启动外部应用程序,winapi,plugins,shellexecute,npapi,createprocess,Winapi,Plugins,Shellexecute,Npapi,Createprocess,我正在试图弄清楚为什么我编写的NPAPI插件不能使用CreateProcess()或ShellExecute()从Javascript调用指定的路径启动应用程序,该插件可以很好地执行通过Javascipt调用触发的操作 我似乎可以使用这两种方法中的任何一种,它们返回成功,即没有错误代码。但应用程序无法启动。我尝试过修改调用它们时使用的参数,以创建新的流程组等,但似乎没有效果 我知道这可能看起来有点安全风险,但出于非常具体的目的,我们希望使用它,因为它不应该是一个问题 使用Windows XP P

我正在试图弄清楚为什么我编写的NPAPI插件不能使用CreateProcess()或ShellExecute()从Javascript调用指定的路径启动应用程序,该插件可以很好地执行通过Javascipt调用触发的操作

我似乎可以使用这两种方法中的任何一种,它们返回成功,即没有错误代码。但应用程序无法启动。我尝试过修改调用它们时使用的参数,以创建新的流程组等,但似乎没有效果

我知道这可能看起来有点安全风险,但出于非常具体的目的,我们希望使用它,因为它不应该是一个问题

使用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。

什么浏览器和windows版本?windows XP Pro SP3和Firefox 3.5我使用无效路径尝试过,但它肯定会返回错误。在这种情况下,我也按照您的建议尝试过,只是将其硬编码以打开类似记事本的内容,但没有成功。我也使用绝对路径,所以当前目录是什么目录都不重要。为了以防万一,我会看一下进程监视器。谢谢。
dependens.exe
在一些罕见的情况下为我创造了奇迹-在FF的跟踪模式下使用它可以提供有关失败系统调用的更多信息。尝试在简单控制台应用程序中运行相同的代码,它启动了exe,这似乎与尝试从DLL中启动它有关?不确定如何使用Dependes.exe来执行您所说的操作,您能否提供执行此操作的步骤?谢谢。@Adam:File->打开并加载firefox.exe,然后Profile->开始评测,设置参数以便立即加载测试页面,等等。。。