Расширение Chrome NPAPI: как выполнить включенный исполняемый файл?

Я создаю небольшой плагин NPAPI для использования в расширении Chrome. Основная цель расширения - открыть PuTTY (с аргументами) с веб-страницы.

У меня есть работа... за исключением пути к PuTTY. У меня есть путь, жестко закодированный в месте на моем диске C. Я хотел бы включить исполняемый файл и запустить его из каталога установки. Как мне это сделать? Вот мой метод Invoke:

bool ScriptablePluginObject::Invoke(NPObject* obj, NPIdentifier methodName,
 const NPVariant* args, ******** argCount,
 NPVariant* result) {
 ScriptablePluginObject *thisObj = (ScriptablePluginObject*)obj;
 char* name = npnfuncs->utf8fromidentifier(methodName);
 bool ret_val = false;
 if (!name) {
 return ret_val;
 }
 if (!strcmp(name, kOpenPutty)) {
 ret_val = true;
 std::string strCMD = std::string("C:\\putty.exe ") + args[0].value.stringValue.UTF8Characters;
 system(strCMD.c_str());
 const char* outString = "success";
 char* npOutString = (char *)npnfuncs->memalloc(strlen(outString) + 1);
 if (!npOutString)
 return false;
 strcpy(npOutString, outString);
 STRINGZ_TO_NPVARIANT(npOutString, *result);
 } else {
 // Exception handling. 
 npnfuncs->setexception(obj, "Unknown method");
 }
 npnfuncs->memfree(name);
 return ret_val;
 }

Любая помощь будет оценена!

1 ответ

В вашем DllMain:

TCHAR* strDLLPath1(new TCHAR[_MAX_PATH]);
::GetModuleFileName(hInstance, strDLLPath1, _MAX_PATH);

strDllPath1 теперь будет содержать путь и имя файла DLL плагина; оттуда вы сможете найти путь к тому, что еще установлено рядом с ним.

licensed under cc by-sa 3.0 with attribution.