2010-05-17 3 views
1

Я пытаюсь выяснить, почему я написал плагин NPAPI, который отлично работает с точки зрения выполнения операций, вызванных вызовами Javascipt, не может использовать CreateProcess() или ShellExecute() для запуска приложение из пути, указанного через вызов Javascript.Запуск внешнего приложения из плагина NPAPI

Я могу, по-видимому, использовать любой из этих методов, и они возвращают успех, то есть код ошибки. Но приложение просто не запускается. Я попытался изменить параметры, используемые при их вызове, создать новую группу процессов и т. Д. Но, похоже, без эффекта.

Я знаю, это может показаться немного опасным для безопасности, но для конкретной цели мы хотим использовать его для этого не должно быть проблемой.

Использование 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); 
} 
+0

Какой браузер и версия для Windows? –

+0

Windows XP Pro SP3 и Firefox 3.5 –

ответ

0

Без какого-либо кода (сниппета) жевать на нем действительно трудно дать ценные советы:

Я не почему это не должно работать на XP. Вы уверены, что вызовы CreateProcess()/ShellExecute() преуспели?

вещи, чтобы попробовать:

  • ли вызов ShellExecute() также увенчаются успехом, если вы передаете неверный путь?

  • Что произойдет, если вы используете жестко закодированный путь (например, путь к notepad.exe, путь без пробелов и т. Д.)?

  • Обратитесь к ProcessMonitor (бывший файлmon), если исполняемый файл приложения, которое вы пытаетесь запустить, выполняется.

Возможно, исполняемый файл не запускается, потому что не существует соответствующей библиотеки DLL.
Имейте в виду, что рабочий/текущий каталог является каталогом исполняемого файла браузера при запуске приложения из плагина.
Поэтому библиотеки DLL, расположенные в папке приложения, могут быть найдены.

+0

Я пробовал его с недопустимыми путями, и в этом случае он определенно возвращает ошибку. Я также пробовал, как вы предлагали, просто жестко кодируя его, чтобы открыть что-то вроде блокнота, без успеха. Я также использую абсолютные пути, поэтому не имеет значения, в каком каталоге находится текущий каталог. Я просто посмотрю на монитор процесса. Спасибо. –

+0

'depend.exe' помогал мне в некоторых редких случаях - использование его в режиме трассировки для FF могло бы дать больше информации о неудачных системных вызовах. –

+0

Пробовал работать с тем же кодом в простом консольном приложении, и он начал exe fine, похоже, что-то связано с попыткой запустить его из DLL-библиотеки? Не знаете, как использовать depend.exe, чтобы делать то, что вы говорите, можете ли вы предоставить меры для этого? Благодарю. –

Смежные вопросы