我正在使用vs2005用C++編寫的windows服務,我遇到了問題。從服務運行程序
該服務必須啓動其他小型可執行文件並獲取它的輸出。我通過調用CreateProcess來做到這點(一個庫實際上對我來說(libexecstream)),它可以工作。
正在啓動的可執行文件位於磁盤上某處,我不知道它在哪裏,它的目錄位於路徑環境變量中。我的服務只是啓動「theTool.exe」,在這裏我們去。
如果路徑變量如下所示:smting;smthingelse;C:\Program Files\blah\bin;meow
它的工作原理。
但是,如果路徑如下所示:smting;smthingelse;%ProgramFiles%\blah\bin;meow
它不再有效!
問題是,在一些機器上它看起來像第一個,在其他人像第二個...
有趣的是,如果我在控制檯啓動它(而不是作爲服務)它工作正常!
有沒有辦法避免這個問題?編程? 像手動改變它的解決方案不是一個選項(客戶端不需要它)。在安裝腳本或類似的東西中更改它不是一個選項,因爲之後可能會更改路徑。
修改工具不是一個選項,因爲我們沒有這樣做,我們沒有源代碼。
編輯: 的CreateProcess的行看起來是這樣的:
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb=sizeof(si);
si.hStdError = err.w();
si.hStdOutput = out.w();
si.hStdInput = in.r();
si.dwFlags |= STARTF_USESTDHANDLES;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
if(!CreateProcess(0, const_cast< char * >(command.c_str()), 0, 0, TRUE, 0, 0, 0, &si, &pi)) {
throw os_error_t("exec_stream_t::start: CreateProcess failed.\n command line was: "+command);
}
其中command
是 「theTool」
第二編輯:如果我的程序啓動,因爲它無法服務,如果它是在它可以工作的控制檯中啓動的
你在64位或32位平臺上運行它嗎?所有支持的平臺都是相同的架構嗎? – Chad
@Chad 32bit - 是的 – foke