Yazdığım hizmet uygulamasından başka bir programı örneğin notepad.exe yi çalıştırtmak istiyorum. Yalnız şöyle bir sorun var görev yöneticinde İşlemler sekmesinde programın çalıştığı görünsede uygulama olarak çalışmıyor..
Denediğim bazı yönemler..
Shellexecute
WinEXEC
CreateProcess
admin hesabı ile çalıştırma
yada başka türlü function lar procedure ler 3. parti bileşenler.
aşağıdaki kod parçacığınıda vkamadan hocam dan dün aldım fakat nafile değişiklik olmadı..
Kod: Tümünü seç
function CreateProcessWithLogonW(
lpUsername,
lpDomain,
lpPassword:PWideChar;
dwLogonFlags:dword;
lpApplicationName: PWideChar;
lpCommandLine: PWideChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
const lpStartupInfo: tSTARTUPINFO;
var lpProcessInformation: TProcessInformation
): BOOL; stdcall; external 'advapi32.dll';
function RunAsUser(const Filename, Domain, Username, Password: string):
Boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
wFilename, wDomain, wUsername, wPassword: PWideChar;
begin
FillChar (StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOWNORMAL;
GetMem(wFilename, Length(Filename) * SizeOf(WideChar) +
SizeOf(WideChar));
GetMem(wDomain, Length(Domain) * SizeOf(WideChar) +
SizeOf(WideChar));
GetMem(wUsername, length(Username) * SizeOf(WideChar) +
SizeOf(WideChar));
GetMem(wPassword, length(Password) * SizeOf(WideChar) +
SizeOf(WideChar));
StringToWideChar(Filename, wFilename, Length(Filename) *
SizeOf(WideChar)
+ SizeOf(WideChar));
StringToWideChar(Domain, wDomain, Length(Domain) *
SizeOf(WideChar)
+ SizeOf(WideChar));
StringToWideChar(Username, wUsername, Length(Username) *
SizeOf(WideChar)
+ SizeOf(WideChar));
StringToWideChar(Password, wPassword, Length(Password) *
SizeOf(WideChar)
+ SizeOf(WideChar));
Result := CreateProcessWithLogonW(
wUsername,
wDomain,
wPassword,
0,
wFilename,
nil,
0,
nil,
nil,
StartupInfo,
ProcessInfo);
if Result then begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end else
RaiseLastOSError;
FreeMem(wFilename);
FreeMem(wDomain);
FreeMem(wUsername);
FreeMem(wPassword);
end;