Seite 1 von 2

Programm ausführen als xxxx

Verfasst: 01.10.2008 14:59
von Barratator
Hallo,
ich suche jetzt bestimmt schon seit 2 Stunden nach einem Beispiel, aber ich finde einfach nichts verwertbares (bin noch zimlicher Anfänger in Purebasic, ich programmiere aber schon etwas länger in anderen Sprachen). Das einzigste, was ich gefunden habe ist die WinAPI Funktion CreateprocesswithlogonW, damit kann ich allerdings nicht viel Anfangen :-(

Ich möchte ein Programm als Administrator (lokal) starten, das Passwort habe ich natürlich. Wie könnte ich dies jetzt am besten lösen?

Betriebsystem:
Windows XP, nach möglichkeit auch Win2K :-)


Gruß
Bastian

Verfasst: 01.10.2008 15:03
von ts-soft

Code: Alles auswählen

ShellExecute_(#Null, @"runas", @"notepad", @"", @"", #SW_SHOWNORMAL) 
http://tinyurl.com/4aseu3

Verfasst: 01.10.2008 15:04
von Barratator
Ja, das klappt zwar schon, aber ich möchte nicht diesen Dialog haben, sondern, dass das ganze Programmintern gemacht wird (Pass liegt in einer Variable)

Gruß
Bastian

Verfasst: 01.10.2008 17:07
von Barratator
Mein Code sieht jetzt so aus:

Code: Alles auswählen

Debug OpenLibrary(0,"Advapi32.dll")
Debug CallFunction(0, "CreateProcessWithLogonW","Administrator",".","*********",2, "","C:\test.exe ",CREATE_DEFAULT_ERROR_MODE,null,null,StartupInfo,ProcessInfo)
Debug GetLastError_()
GetLastError gibt immer 2 zurück (ERROR_FILE_NOT_FOUND; The system cannot find the file specified.) .
Die Datei existiert allerdings...Auch die explorer.exe konnte er nicht finden :-(
Danke für eure Hilfe im vorraus :)


Gruß
Bastian

Verfasst: 01.10.2008 21:11
von Rings
w am ende des Namens bedeutet bei Api-Funktionen meist widechar, also unicode !!!

Verfasst: 01.10.2008 21:21
von Barratator
Ok, das hab' ich jetzt soweit verstanden (klappt auch super), allerdings muss ich das ganze als ANSI haben, weil ich die Procedure als DLL in einem anderem Programm brauche, welches nur ANSI unterstütz (ich weiß nicht wieso, aber PureBasic-DLLs mit Unicode klappen da nicht :( )

Laut WinAPI gibt es auch keinCreateProcessWithLogonA; was könnte man da jetzt machen? :)

Vielen Dank im vorraus!


Gruß
Bastian

Verfasst: 01.10.2008 22:06
von ts-soft
Barratator hat geschrieben: Laut WinAPI gibt es auch keinCreateProcessWithLogonA; was könnte man da jetzt machen? :)

Vielen Dank im vorraus!


Gruß
Bastian
Stichwort: Prototype, Pseudotype p-unicode

DLL Funktionen sollten sowieso immer geprototyped werden! Um den
Lerneffekt zu erhalten, kein Beispiel :mrgreen:

Verfasst: 02.10.2008 09:30
von Barratator
Ok :-) Danke^^

Jetzt gibt es aber das Problem, dass selbst wenn die Benutzernamen und Passwörter richtig sind, das ganze als "User" (aktueller Benutzername) ausgeführt wird.
Wenn ich jetzt aber die Benutzernamen und Passwörter ändere, sodass sie nichtmehr richtig an die Funktion übergeben werden, wird trotzdem 1 (Erfolgreich) zurückgegeben und das Programm als "User" geöffnet o.O

Wie kommt das?? Danke im vorraus :)


Gruß
Bastian

Verfasst: 02.10.2008 10:06
von Rings
hmm,
Bild

Verfasst: 02.10.2008 10:22
von Barratator
...
Hier ist der Code:

Code: Alles auswählen

Procedure RunAs(file.s,user.s,pass.s)
  Define StartupInfo.StartupInfo
  Define ProcessInfo.PROCESS_INFORMATION
  OpenLibrary(0,"Advapi32.dll")
  r= CallFunction(0, "CreateProcessWithLogonW",user,".",pass,2, file,"",CREATE_DEFAULT_ERROR_MODE,null,null,StartupInfo,ProcessInfo) 
  CloseLibrary(0)
  ProcedureReturn r
EndProcedure
Gruß
Bastian