Запуск внешнего приложения из плагина NPAPI - PullRequest
1 голос
/ 17 мая 2010

Я пытаюсь выяснить, почему написанный мной плагин 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 ); 
}

1 Ответ

0 голосов
/ 17 мая 2010

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

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

Что попробовать:

  • Вызов ShellExecute () также будет успешным, если вы передадите неверный путь?

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

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

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

...