StartType = stSystem で、Delphi 7 で作成された Windows サービスがあります。
ここで、何かを作成するためにアプリケーションを起動する必要があります。このアプリケーションには、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 Pro x64 です
私は何を間違っていますか?どうすればこれを解決できますか? 誰かが例を投稿できますか?