簡體   English   中英

如何使用 c++ 從 windows 服務運行 a.exe 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM