[英]How can I run a .exe file from a windows service using c++
我是 windows 服務和視覺工作室的新手。 我正在嘗試從 wind32 應用程序啟動 a.exe 文件。 代碼工作正常,沒有錯誤。 我正在使用 CreateProcess() 方法並檢查該方法是否正常運行。 它沒有任何問題。 我調用的.exe 文件只是創建文本文檔。 當我從控制台調用 that.exe 文件時,它工作正常,它會創建文件。 但是當我從 wind32 應用程序調用它時,它不會創建任何文件。 我正在使用 Visual Studio 2019。這是我調用 .exe 文件的代碼。 `
STARTUPINFO info;
PROCESS_INFORMATION processInfo;
ZeroMemory(&info, sizeof(info));
info.cb = sizeof(info);
ZeroMemory(&processInfo, sizeof(processInfo));
LPCWSTR path = L"C:\\HP\\...(pathofexe).exe";
bool bSuccess = CreateProcess(path, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);
if (bSuccess)
{
cout << "Success";
}
else
{
cout << "Error : " << GetLastError() << endl;
}`
關於評論中討論的工作目錄不匹配,該文件可能不存在,因為它只是在其他地方。
你打電話:
CreateProcess(path, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);
假設您已閱讀文檔,您知道第 8 個參數指定了新進程將運行的目錄。 因為您使用NULL
,所以這個目錄將與調用者進程的目錄相同,我假設"C:\\Users\\HP\\source\\repos\\ThisThingsName\\Debug\\"
。
僅此一點不是問題,但鑒於上下文我相信被調用者( SampleService.exe
)從其相對路徑"\\Success.txt"
而不是完整路徑調用文件 function ,對嗎?
在這種情況下,當您手動打開SampleService.exe
時, Success.txt
將出現在"C:\\Users\\HP\\source\\repos\\SampleService\\Debug\\"
中。 但是,當您使用CreateProcess
打開它時,它會在"C:\\Users\\HP\\source\\repos\\ThisThingsName\\Debug\\"
中運行(因為您沒有另外指定),這也是Success.txt
會出現。
實際上,當我鍵入此內容時,我開始懷疑它。 您沒有檢查它在資源管理器中的顯示位置嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.