我有一個使用Delphi 7創建的Windows服務,使用StartType = stSystem。LogonUser + CreateProcessAsUser at Service = error 1314
現在我需要啓動一個應用程序來爲我做一些事情。 此應用程序有一個MainForm和其他GDI資源。 傳遞給應用程序的參數對於某些控件賦值(如編輯和記事),然後點擊一個按鈕....
我想這一點:
var
token: cardinal;
si: TStartupInfo;
pi: TProcessInformation;
begin
if not LogonUser('admintest', '', 'secret123', LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token) then
RaiseLastOSError;
try
if not ImpersonateLoggedOnUser(token) then
RaiseLastOSError;
fillchar(si, sizeof(si), 0);
si.cb := sizeof(si);
si.lpDesktop := PChar('winsta0\default');
if not CreateProcessAsUser(token, nil, '"c:\...\myapp.exe" -doCrazyThings', nil, nil, false, NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE, nil, nil, si, pi) then
RaiseLastOSError;
CloseHandle(pi.hThread);
waitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
finally
CLoseHandle(token);
end;
end;
當我跑我的服務可執行文件作爲普通應用程序(-noservice),它將作爲Forms.Application啓動並創建一個帶有「開始」按鈕的MainForm。 * 該按鈕運行與服務運行相同的代碼,但它不起作用,並且它正在createprocessasuser中傳遞錯誤代碼1314。 *
爲什麼? SYSTEM服務和管理員啓動的正常應用程序有什麼不同?
我的環境是Windows 7專業版64位
我在做什麼錯? 我該如何解決這個問題? 有人可以發表一個例子嗎?
[CreateProcessAsUser error 1314](http://stackoverflow.com/questions/1475577/createprocessasuser-error-1314) –
[閱讀文檔](http://msdn.microsoft.com/en-us /library/windows/desktop/ms682429.aspx)。您用於以noservice模式運行應用程序的用戶帳戶可能沒有必要的權限,但在服務模式下運行應用程序時,SYSTEM帳戶確實具有權限。 –
如果您正在運行請求LOCALSYSTEM,那麼您不需要LogonUser和明文密碼。如果你在桌面上運行,你可以簡單地調用CreateProcess。 –