AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lokal Adminrechte erlangen

Ein Thema von Hobbycoder · begonnen am 30. Apr 2020 · letzter Beitrag vom 1. Mai 2020
 
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#1

Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 07:38
Mein Programm wird in der Regel aus einem Netzlaufwerk gestartet. Für einige Client's, die über VPN angebunden sind, soll eine Funktion mit rein, das Programm lokal zu installieren, da die VPN teilweise keine große Bandbreite hat.

Ich versuche über folgende Methoden mein Programm kurz und knapp lokal auf den Rechner zu bringen.

Delphi-Quellcode:
function Impersonate(const User, PW: string): Boolean;
var
  LogonType : Integer;
  LogonProvider : Integer;
  TokenHandle : THandle;
  strAdminUser : string;
  strAdminDomain : string;
  strAdminPassword : string;
  i: Integer;
begin
  LogonType := LOGON32_LOGON_INTERACTIVE;
  LogonProvider := LOGON32_PROVIDER_DEFAULT;
  strAdminUser := User;
  if Pos('\', strAdminUser)=0 then
  begin
    strAdminDomain:='.';
  end else begin
    strAdminDomain := Copy(strAdminUser, 1, pos('\', strAdminUser)-1);
    strAdminUser := Copy(strAdminUser, Pos('\', strAdminUser)+1, Length(strAdminUser));
  end;
  strAdminPassword := PW;
  if strAdminDomain<>'then
  begin
    Result := LogonUser(PChar(strAdminUser), PChar(strAdminDomain),
      PChar(strAdminPassword), LogonType, LogonProvider, TokenHandle);
  end else begin
    Result := LogonUser(PChar(strAdminUser), nil,
      PChar(strAdminPassword), LogonType, LogonProvider, TokenHandle);
  end;
  if Result then
  begin
    Result := ImpersonateLoggedOnUser(TokenHandle);
  end;
end;

function LocalInstallation(UserName, Password: string): string;
var
  Directory: string;
begin
  Result:='';
  if Impersonate(UserName, Password) then
  begin
    Directory:=getWinSpecialFolder(CSIDL_PROGRAM_FILESX86)+'MeinProgramm\';
    if ForceDirectories(Directory) then
    begin
      if CopyFile(PChar(Application.Exename), PChar(Directory+ExtractFileName(Application.ExeName)), True) then
      begin
        CreateShortcut(Directory+ExtractFileName(Application.ExeName), _DESKTOP, '',Directory,'','', 'MeinProgramm.lnk');
        CreateShortcut(Directory+ExtractFileName(Application.ExeName), _STARTMENU, 'QualityCheck',Directory,'','', 'MeinProgramm.lnk');
        Result:=Directory+ExtractFileName(Application.ExeName);
      end else
        RaiseLastOSError;
    end else
      RaiseLastOSError;
  end;
end;
Mit den richten Anmeldedaten komme ich auch bis zum ForceDirectories in der Methode "LocalInstallation". Da kommt immer "Zugriff verweigert" (Nehme zum Testen lokales Administratorkonto). Wenn ich mich als Administrator im Windows anmelde kann ich im Windows-Explorer den Ordner ohne weitere Probleme anlegen. (Windows 10)

Nutze ich ImpersonateLoggedOnUser falsch? Oder gibt es für sowas eine besser Möglichkeit?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz