AGB  ·  Datenschutz  ·  Impressum  







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

Passwort automatisch eingeben

Ein Thema von lukdelphias · begonnen am 10. Aug 2020 · letzter Beitrag vom 17. Aug 2020
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#1

AW: Passwort automatisch eingeben

  Alt 10. Aug 2020, 13:46
Also:

Nachdem meine erste Antwort nach genauerem Lesen eigentlich überflüssig war (ist halt doch irgendwie zu warm hier bei 39,3° im Schatten), derweil ich einfach mal etwas genauer hätte lesen sollen, bevor ich antworte. Sorry, versuche mich zu bessern

Mal langsam:

Batch funktioniert wie gewünscht von der Konsole.
Code:
WScript.CreateObject("WScript.Shell").SendKeys("password{ENTER}");
gibt das Passwort wie gewünscht weiter.

Beim ShellExecute aus Delphi heraus scheint dies aber nicht zu funktionieren.

Wunsch ist es:

Batchdatei weiterhin aus Delphi aufrufen und das Passwort wird nicht von WScript im Batch selbst "übergeben", sondern dieser Teil wird von Delphi übernommen.

Keine Ahnung, ob es hilft und wie das mit 'nem ShellExecute zusammenpassen könnte:

Stöbere bitte mal bitte im Umfeld von https://stackoverflow.com/questions/...n-using-winapi herum, eventuell kann ich Dir ja damit jetzt doch noch was zielführendes anbieten

Eventuell kannst Du die Batchdatei aber auch erweitern:

Schau mal bitte hier: https://docs.microsoft.com/en-us/pre...ectedfrom=MSDN

Jetzt nur als absolut ungetestete Idee:
Code:
@if (@CodeSection == @Batch) @then
@echo off
:: Parameter %1 der Batchdatei enthält dass Passwort des Administrators für den Server 01 und wird hier gespeichert.
cmdkey /add:server01 /user:administrator /pass:%1
start runas /user:administrator C:\temp\...
CScript //nologo //E:JScript "%~F0"
:: Die gespeicherte Anmeldung für den Administrator wird wieder gelöscht.
cmdkey /delete:server01
goto :EOF
@end
Mit etwas Glück musst Du dann in Deinem bisherigen ShellExecute nur das Administratorpasswort als ersten Parameter übergeben.
  Mit Zitat antworten Zitat
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Passwort automatisch eingeben

  Alt 10. Aug 2020, 13:51
Hallo Delphi.Narium immer noch nicht ganz. Das mit der Batch hast du richtig verstanden. Allerdings soll die Batch Datei komplett entfallen und alles soll aus Delphi herraus passieren.
Das Delphi Projekt siht bis jetzt so aus. Nicht von den ganzen uses verwirren lassen das ich noch vom vorherign Projekt
Delphi-Quellcode:
program Project3;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls, SHELLAPI, System.IOUtils,
  Registry, ShlObj, WinInet, System.UITypes,
  TlHelp32, WinSock;

begin
  try
    Shellexecute(0, 'open', PChar('runas'), PChar('/user:administrator C:\temp\...'), nil, SW_SHOW);
  except

  end;
end.
Hier soll einfach nur noch eine Funktion implementiert werden die die Aufgabe von SendKey aus der Batch übernimmt da auch hier nach dem ausführen die Eingabe des Adminpassworts geforder wird.
Wenn ich aber KodeZwerg richtig verstanden habe geht das leider nicht oder wie?

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Passwort automatisch eingeben

  Alt 10. Aug 2020, 13:58
Teste doch einfach mal meinen Code, ich kann es erst heut abend. Etwaige sonder-parameter habe ich bei mir nicht berücksichtigt.
Mein Schnippsel bezieht sich nur darauf: Ein Programm.exe unter dem Kontext von Benutzername plus Passwort starten ohne UAC.

//edit
Ps: Nicht die Leerzeichen beim Namen+Passwort vergessen! Deshalb auch mein kriminelles Beispiel für Code
Gruß vom KodeZwerg

Geändert von KodeZwerg (10. Aug 2020 um 14:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#4

AW: Passwort automatisch eingeben

  Alt 10. Aug 2020, 14:06
Ebenso, wie man mit dem UAC-Dialogen nicht interagieren kann, gibt es auch bei RUNUS aus Sicherheitsgründen keinen Paramter, womit man das Passwort reingeben kann.
Aber es lässt sich via PIPE übergeben. https://stackoverflow.com/questions/...-line/16116329

Beim CreateProcess kann man auch so eine PIPE einrichten, siehe lpStartupInfo.hStdInput
auch wenn es hier sinnlos wäre, da man auch direkt CreateProcessAsUser/CreateProcessWithLogonW verwenden kann.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Passwort automatisch eingeben

  Alt 10. Aug 2020, 14:11
Also KodeZwerg,
habe deinen Code mal probiert.
Fehler gibt es mir keine aus allerdings wird das Programm nicht ausgeführt...leider.
Hier der Code dazu:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ShellAPI;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure RunAsExec(hWnd: HWND; aFile: string; aParameters: string);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation


{$R *.dfm}

procedure TForm2.RunAsExec(hWnd: HWND; aFile: string; aParameters: string);
var
  SEI: TShellExecuteInfo;
begin
  FillChar(SEI, SizeOf(SEI), 0);
  SEI.cbSize := sizeof(SEI);
  SEI.Wnd := hWnd;
  SEI.fMask := SEE_MASK_NOCLOSEPROCESS;
  SEI.lpVerb := 'runas';
  SEI.lpFile := PChar(aFile);
  SEI.lpParameters := PChar(aParameters);
  SEI.nShow := SW_SHOWNORMAL;
  if not ShellExecuteEx(@SEI) then
    RaiseLastOSError;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  DateiName: string;
  Parameter: string;
begin
  DateiName := 'C:\temp\test.exe';
  Parameter := ' ' + 'administrator' + ' ' + 'password';
  RunAsExec(Application.Handle, DateiName, Parameter);
end;

end.

@himitsu
Da schon viele von CreateProcessWithLogonW geredet haben. Hast du dafür irgendein Beispiel. Ich weiß nicht wie ich das auf meinen Fall anwenden muss, sodass es funktioniert
  Mit Zitat antworten Zitat
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Passwort automatisch eingeben

  Alt 10. Aug 2020, 14:13
Nur das habe ich bisher probiert:
Delphi-Quellcode:
program runadmin;

{$APPTYPE CONSOLE}

uses
  System, SysUtils, JwaWinBase;

var
  si: STARTUPINFOW;
  pif: PROCESS_INFORMATION;
  res: Boolean;
  s: string;
  cmd: PWideChar;
begin
  if Length(ParamStr(1)) = 0 then
    WriteLn(
      'RunAdmin - Kommando unter Administrator-Konto ausführen' + #13#10 +
      'Usage: runadmin <command>')
  else
  try
    si.cb := SizeOf(startupinfow);
    si.dwFlags := STARTF_USESHOWWINDOW;
    si.wShowWindow := 1;
    si.lpReserved := nil;
    si.lpDesktop := nil;
    si.lpTitle := 'Konsole';
    getmem(cmd,Length(ParamStr(1))*2);
    cmd := StringToWideChar(ParamStr(1),cmd,Length(ParamStr(1))*2);
    res := CreateProcessWithLogonW('Administrator', '', 'password', LOGON_WITH_PROFILE,
      nil,cmd,CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);
    if booltostr(res) = '0then
    begin
      str(GetLastError, s);
      WriteLn('Beim Ausfuehren des Befehls "' + ParamStr(1) + '"');
      WriteLn('ist der Fehler ' + s + ' aufgetreten.');
      Halt(1);
    end;
  except
    on E: Exception do
    begin
      WriteLn('Beim Ausfuehren des Befehls "' + ParamStr(1) + '"');
      WriteLn('ist der Fehler ' + E.Message + ' aufgetreten.');
      Halt(1);
    end;
  end;

end.
Das ist ein angeblich lauffähiges Beispiel aus einem anderen Thema. Funktioniert bei mir leider nicht.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Passwort automatisch eingeben

  Alt 10. Aug 2020, 14:14
Existiert ein Benutzerkonto namens "Administrator" ?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:55 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