Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Нужно чтобы сервис запускал exe под именем пользователя   Найти похожие ветки 

 
dream   (2003-10-29 15:35) [0]

под которым сейчас загружена windows ,а он гад запускает под system :(
как исправить ? сервис инсталируеться под администраторм , по сути он должен запускать exe с правам администратора ?

или подскажите пример как запустить exe с правами выбраного пользователя ( логин и пароль знаю )


 
Юрий Зотов ©   (2003-10-29 15:38) [1]

CreateProcessAsUser


 
Kashey ©   (2003-10-29 15:39) [2]

Вставлять его в авторан :)


 
dream   (2003-10-29 15:41) [3]

> Kashey

Кого вставлять в авторан ? сервис ? :)


 
dream   (2003-10-29 15:42) [4]

> Юрий Зотов

Нашёл пример только на С++ :( а на delphi пример есть ?


 
Kashey ©   (2003-10-29 15:49) [5]

Если хочешь чтобы "сервис" запускался от имени пользователя- самый простой способ сделать его не сервисом а програмой с автораном.

или очень нужен локальный\удаленый конрол работы службы?

Если нашол пример на С++, но не знаешь как он должен быть на дельфях - притарань пример сюда, переведу


 
Игорь Шевченко ©   (2003-10-29 16:07) [6]


> или подскажите пример как запустить exe с правами выбраного
> пользователя ( логин и пароль знаю )


CreateProcessWithLogonW

unit main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TfMain = class(TForm)
Button: TButton;
procedure ButtonClick(Sender: TObject);
end;

var
fMain: TfMain;

implementation
uses
HSAdvApi;

{$R *.dfm}

procedure TfMain.ButtonClick(Sender: TObject);
begin
MyCreateProcess();
end;

procedure TfMain.MyCreateProcess;
const
UserName : WideString = "TESTUSER";
Password : WideString = "testuser";
ConstCommandLine : String = "CMD.EXE";
Title : WideString = "Test process";
Domain : WideString = "WORKGROUP";
var
MyStartupInfo : STARTUPINFO;
ProcessInfo : PROCESS_INFORMATION;
CommandLine : array[0..512] of WideChar;
begin
FillChar(MyStartupInfo, SizeOf(MyStartupInfo), 0);
MyStartupInfo.cb := SizeOf(MyStartupInfo);
StringToWideChar(ConstCommandLine, CommandLine,
Sizeof(CommandLine) div SizeOf(WideChar));
MyStartupInfo.lpTitle := PWideChar(Title);
if not CreateProcessWithLogonW (PWideChar(UserName), PWideChar(Domain),
PWideChar(Password), LOGON_WITH_PROFILE, nil,
CommandLine, 0, nil, nil, @MyStartupInfo, @ProcessInfo) then
RaiseLastWin32Error()
else begin
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;

end.


unit HSAdvApi;

interface
uses
Windows;

function CreateProcessWithLogonW (const lpUsername : PWideChar;
const lpDomain : PWideChar; const lpPassword : PWideChar;
dwLogonFlags : DWORD; const lpApplicationName : PWideChar;
lpCommandLine : PWideChar; dwCreationFlags : DWORD;
lpEnvironment : Pointer; const lpCurrentDirectory : PWideChar;
lpStartupInfo : PStartupInfo;
lpProcessInfo : PProcessInformation) : Boolean; stdcall;

const
LOGON_WITH_PROFILE = $00000001;
LOGON_NETCREDENTIALS_ONLY = $00000002;
LOGON_ZERO_PASSWORD_BUFFER = $80000000;

implementation
uses
SysUtils;

{ ADVAPI32.DLL functions }
type
TCreateProcessWithLogonW =
function (const lpUsername : PWideChar;
const lpDomain : PWideChar; const lpPassword : PWideChar;
dwLogonFlags : DWORD; const lpApplicationName : PWideChar;
lpCommandLine : PWideChar; dwCreationFlags : DWORD;
lpEnvironment : Pointer; const lpCurrentDirectory : PWideChar;
lpStartupInfo : PStartupInfo;
lpProcessInfo : PProcessInformation) : Boolean; stdcall;

const
DllName = "advapi32.dll";

var
DllHandle : THandle;
_CreateProcessWithLogonW : TCreateProcessWithLogonW;

function InitLib : Boolean;
begin
if DllHandle = 0 then
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
DllHandle := LoadLibrary(DllName);
if DllHandle <> 0 then begin
@_CreateProcessWithLogonW := GetProcAddress(DllHandle,
"CreateProcessWithLogonW");
end;
end;
Result := (DllHandle <> 0);
end;

function NotImplementedBool : Boolean;
begin
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
Result := false;
end;

function CreateProcessWithLogonW (const lpUsername : PWideChar;
const lpDomain : PWideChar; const lpPassword : PWideChar;
dwLogonFlags : DWORD; const lpApplicationName : PWideChar;
lpCommandLine : PWideChar; dwCreationFlags : DWORD;
lpEnvironment : Pointer; const lpCurrentDirectory : PWideChar;
lpStartupInfo : PStartupInfo;
lpProcessInfo : PProcessInformation) : Boolean; stdcall;
begin
if InitLib and Assigned(_CreateProcessWithLogonW) then
Result := _CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword,
dwLogonFlags, lpApplicationName, lpCommandLine, dwCreationFlags,
lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInfo)
else
Result := NotImplementedBool;
end;

initialization
finalization
if DllHandle <> 0 then
FreeLibrary(DllHandle);
end.


 
zapped ©   (2003-10-29 16:24) [7]

лезешь в Панель управления - Администрирование - Службы - находишь свою службу, лезешь в её свойства, закладка ВХОД В СИСТЕМУ, там выбираешь С ИМЕНЕМ ПОЛЬЗОВАТЕЛЯ, указываешь известные тебе логин, пасворд и подтверждение оного ;))


 
zapped ©   (2003-10-29 16:29) [8]

in addintion 2 [7]
прощу прощения, я малость невнимательно прочёл вопрос... но предлагаемый способ, думаю поможет, ибо тогда сервис будет запускаться с правами известного пользователя, а следственно и все процессы, которые обычно запускает :)))



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
3-40890
Barada
2003-10-20 15:07
2003.11.13
Как вытащить список доступных LANGDRIVER ?


7-42145
Эдуард
2003-09-03 17:29
2003.11.13
Как корректно (!) не дать приложению закрыться


8-41766
Эдуард
2003-07-05 22:06
2003.11.13
Помогите с OpenGl


3-40971
SasaR
2003-10-16 17:16
2003.11.13
BLOB поле


14-42097
ZeroDivide
2003-10-23 10:33
2003.11.13
Кто знает, чем закончилась