Uruchamianie aplikacji jako...

Uruchamianie aplikacji jako...
ZI
  • Rejestracja:ponad 22 lata
  • Ostatnio:prawie 5 lat
0

Szukałem na forum ale nic konkretnego nie znalazlem.

Mam np. 5 uzytkowników (WinXP). Chce napisać program który będzie miał 5 przycisków, a każdy przycisk będzie odpowiadał uzytkownikowi. Jęzeli nacisne przycisk 1 to włączy się program Notatnik z uzytkownika 1, jeśli nacisne przycisk 2 to włączy się Notatnik z uzytkownika 2 itp.

Klikając prawym przyciskiem myszy na jakąś aplikacje jest tam poleceni :"Uruchom jako..." można tam wybrać uzytkownika oraz wpisać hasło, dokładnie o takie uruchamianie mi chodzi ale poprzez program w Delphi.

Bardzo proszę o pomoc.

PzDr's...

Adam.Pilorz
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 14 lat
  • Postów:2998
0

Taka wskazówka: polecenie systemowe "runas /user:nazwa_użytkownika polecenie".
Po użyciu runas /? w linii poleceń wszystko stanie się jasne.


Grunt to uziemienie...
ZI
  • Rejestracja:ponad 22 lata
  • Ostatnio:prawie 5 lat
0

dzieki wielkie, juz wiem jak to wykorzystac.

PzDr's...

Lecz gdyby jeszcze ktos mial jakis pomysl to prosze pisac.

Np. jak uruchamiac ten program bez potrzeby za kazdym razem wpisywania hasla w oknie command.

BW
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 18 lat
0
Ziomekpfk napisał(a)

jak uruchamiac ten program bez potrzeby za kazdym razem wpisywania hasla w oknie command.

Od win 2000 możesz skorzystać z CreateProcessWithLogonW

Kopiuj
type
  runinfo = record
    wynik:boolean;
    phandle:cardinal;
    errortext:string;
  end;

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,username,password:string;Domena:string='.'):runinfo;
var
  StartupInfo: tStartupInfo;
  ProcessInfo: TProcessInformation;
  wfilename,wusername,wpassword,wdomena:pwidechar;
    function LastErrorText:string;
      var
        blad:cardinal;
        s:string;
    begin
      blad:=GetLastError;
      s:=SysErrorMessage(blad);
      if s='' then s:='nieznanej';
      result:=Format('Błąd nr %d o treści "%s"', [blad, s]);
    end;
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( wusername, length(username) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;
  GetMem( wpassword, length(password) * SizeOf( WideChar ) + SizeOf(WideChar ) ) ;
  GetMem( wdomena, length(Domena) * SizeOf( WideChar ) + SizeOf (WideChar));
  StringToWideChar( filename, wfilename, Length( filename ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
  StringToWideChar( username, wusername, Length( username ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
  StringToWideChar( password, wpassword, Length( password ) * SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
  StringToWideChar( Domena,   wdomena ,  Length(Domena)*      SizeOf(WideChar ) + SizeOf( WideChar ) ) ;
  result.wynik:=CreateProcessWithLogonW(wusername,nil,wpassword,0, wfilename, nil,
          0, nil, nil,StartupInfo , ProcessInfo);
  if not Result.wynik then Result.errortext:=LastErrorText;
  Result.phandle:= ProcessInfo.hProcess ;
  freemem(wfilename);
  freemem(wusername);
  freemem(wpassword);
end;

a użyc np tak

Kopiuj
var
res:runinfo;
begin
res:=RunAsUser('twój_program.exe','Gość','','.');
if not res.wynik then
  ShowMessage(res.errortext);
ZI
  • Rejestracja:ponad 22 lata
  • Ostatnio:prawie 5 lat
0

Prawie super, bo chodziło mi o takie uruchamianie, ale przy uruchamianiu programu nie jest ładowany jego profil.

Polecenie "runas" ma 2 parametry do wyboru:
"/Profile - Ładuje profil użytkownika
/No profile - Określa, że nie należy ładować profilu użytkownika. Ten parametr umożliwia szybsze ładowanie aplikacji, ale może być przyczyną nieprawidłowego funkcjonowania niektórych programów."

Wyżej opisana funkcja uruchamia program dokładnie tak jak bym sobie życzył, ale nie jest ładowany profil uzytkownika, tak jak to można zrobić w poleceniu "runas".

Prosze o kolejne pomysły.

PzDr's...

BW
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 18 lat
0

więc ustaw dwLogonFlags na LOGON_WITH_PROFILE :)
LOGON_WITH_PROFILE = $00000001;
zresztą poczytaj msdn

ZI
  • Rejestracja:ponad 22 lata
  • Ostatnio:prawie 5 lat
0

Dzięki Wielkie, to jest dokładnie to czego szukałem!
SUPER!

PzDr's...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.