StartType = stSystem の Windows サービスがあります。
CreateProcessWithLogonW でアプリケーションを実行します。
usr := 'myuser';
dmn := 'mydomain';
pwd := 'thepassword';
cmd := 'c:\myapp.exe -calculate';
wdir := 'c:\';
fillchar(si, sizeof(si), 0);
si.cb := sizeof(si);
if not CreateProcessWithLogon(
PWideChar(usr),
PWideCharOf(dmn),
PWideChar(pwd),
LOGON_WITH_PROFILE,
nil,
PWideChar(cmd),
NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
nil,
PWideChar(wdir),
si,
pi
)
then
RaiseLastOSError; // raises Code 5: Access Denied
このコードをサービスの外で実行すると、すべてうまくいきます!
CreateProcessWithLogon でシステム エラー Code 5: Access Denied が発生するのはなぜですか?
これが原因でしょうか?
CreateProcessWithLogonW に関する MSDN の記事は次のように述べています。
Windows XP SP2 および Windows Server 2003: 関数は呼び出し元トークンでログオン SID を使用し、LocalSystem アカウントのトークンにはこの SID が含まれていないため、LocalSystem アカウントで実行されているプロセスから CreateProcessWithLogonW を呼び出すことはできません。別の方法として、CreateProcessAsUser および LogonUser 関数を使用します。
Windows 7 PRO x64 を使用しています