Externes Programm starten
-
Hallo Leute,
kann mir jemand wieder einmal Helfen ?
Ich möcht mittels system(Programmpfad) oder ShellExecute eine .bat Datei öffnen.
Jetzt möchte ich diese Datei mit einem Benutzerrecht öffnen.
Unter der Dos Schell geht das.Wie mache ich das ??
Das gestartete Programm soll mit den werten aus meinem c++ Programm weiter arbeiten.
Hat jemand ne idee ??
Gruß
andy_mann
-
-
Ohhh mannnn...
kann es denn nicht irgend wan einmal einfach sein ??
Für jede duslige Funktion muß man seiten Weise sich Informieren.....Gibt es denn nicht einfach ein kleines Beispiel, wo ein paar Daten als anschaungsbeispiel da stehen ??
Hinzu kommt auch noch, dass ich Win 2000 oder Win XP benutze....
Da braucht man anscheinend SE_TCB_NAME...
und dann gibt es noch
CreateProcessWithLogonW ???Ich stehe echt im Walde..
Ich will doch nur starte Programm mit admin, passwort........
Kann mir jemand Helfen ??
Gruß und Danke
andy_mann
-
hmm das problem liegt in der sicherheit... wenn man die batchdatei als admin ausführen kann, könnte jeder die datei ändern und dann als admin alles am system machen... eigentlich nicht so gut... um irgendwas von einem programm aus unter einem anderen anmeldenamen zu verwenden is sowieso schon etwas problematisch von wegen systemsicherheit (das is leider kein linux), aber mit CreateProcessWithLogonW() sollte es gehen mit der beschränkung das der befehl NUR auf win2k/xp läuft...
benutz username, domain ist "." (ich denk mal du hast zuhause keinen domain-controller rumstehen oder?) und password is auch bekannt... LOGON_NETCREDENTIALS_ONLY, ApplicationName, CommandLine, CREATE_DEFAULT_ERROR_MODE, NULL, CurrentDirectory, StartupInfo, ProcessInfo
is alles eigentlich ziemlich easy... startupinfo einfach mit 0 initialisieren und processinfo auch... nur bei startupinfo muss das cb gesetzt sein... steht aber alles auch im msdn drin...
Gruß
-
Hallo,
erst mal vielen Dank für die Hilfe.
Habe es nun mal versucht:
CreateProcessWithLogonW("Administrator",NULL, "*****",LOGON_NETCREDENTIALS_ONLY, NULL, MAX_PATH, CREATE_DEFAULT_ERROR_MODE, NULL, "C:\test.bat", 0, 0);
Jetzt fängt es aber schon damit an, dass er CreateProcessWithLogonW nicht kennt.
Was muß man den noch alles includen ??
Und was gehört genau in
CommandLine
CurrentDirectory
hinein ??Gruß
und Danke
andy_mann
-
Hast du auch Advapi32.lib eingebunden - sowas steht immer ganz unten bei den Requirements
Und das andere ist doch eigentlich in der MSDN-Library auch gut erklärt:
mit lpCommandLine kannst du zusätzliche Parameter mit übergeben
mit lpCurrentDirectory bestimmst du das Verzeichnis, das der neue Prozess als aktuelles Verzeichnis (wenn irgendwo relative Pfade verwendet werden oder evtl. im Öffnen-Dialog) verwenden soll
Du kannst aber bei beiden auch einfach NULL einsetzen
-
Also Advapi32.lib habe ich eingebunden..
Unter Einstellungen Linker Objekt-/Bibliothek Module.Habe auch noch #include "Winbase.h" eingebracht...
Aber er kennt es nicht....
Aber von der sintax müsste mein Commando jetzt stimmen ??
Was bedeuteten WideString("String") ?
Habe ich jetzt schon paar mal gelesen ??Gruß
andy_mann
-
Winbase.h solltest du nicht direkt einbinden, sondern indirekt über windows.h (so wie es auch in der Doku steht)
WideString("String") sieht für mich nach VCL-Code aus - bin mir aber nicht sicherWas für eine Fehlermeldung bekommst du denn genau?
-
ALso winbase.h ist bereits in der windows.h includiert.
Stand schon drin.Fehlermeldung:
error C2065: 'CreateProcessWithLogonW' : nichtdeklarierter Bezeichner
error C2065: 'LOGON_NETCREDENTIALS_ONLY' : nichtdeklarierter BezeichnerGruß
andy_mann
-
Wie aktuell ist Dein Platform SDK?
-
Setzt mal vor dem einbinden von windows.h noch das ein:
#define _WIN32_WINNT 0x0500
-
nunja ein widestring ist hier einfach nur ein multibyte character string... also unicode... da das eine unicode funktion ist (erkennbar an der W-endung der funktion) muss man seine strings mit dem makro _T() konviertieren...
Soo ich hab mich dann mal erbarmt und ein bischen code getippt... bei mir klappt das so und das notepad startet auch ordnungsgemäß als user testaccount. viel spaß damit...
/* Einbinden der Advapi32.lib nicht vergessen!!! */ #define _WIN32_WINNT 0x0500 #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); si.cb = sizeof(si); WCHAR szCommandLine[] = _T("notepad.exe"); // Darf nicht const sein!!! if(!CreateProcessWithLogonW(_T("testaccount"), _T("."), _T("hallo"), LOGON_WITH_PROFILE, NULL, szCommandLine, NULL, NULL, NULL, &si, &pi)) // Der Punkt beim Parameter 2 bedeutet, das die lokale Benutzerdatenbank verwendet werden soll. { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); MessageBox(NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONEXCLAMATION); LocalFree(lpMsgBuf); // Bei Fehlermeldung: "Der angegebene Dienst kann nicht gestartet werden..." // überprüfe ob der Dienst "Sekundäre Anmeldung" aktiviert und gestartet ist! } CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; }
Gruß
PS: Bitte den Hinweis mit dem "Sekundäre Anmeldung" beachten...
-
Also vielen vielen Dank,
soll Dir im Kindersegen wieder rein kommen.
Das werde ich dann gleich mal testen.
Gruß
andy_mann
-
Hallo,
ich habe mich ja schon gefreut, dass ich was habe...
aber Fehler:
error C2440: 'initializing' : 'char [12]' kann nicht in 'unsigned short []' konvertiert werden
Es gibt keinen Kontext, in dem diese Konvertierung moeglich ist
error C2065: 'CreateProcessWithLogonW' : nichtdeklarierter Bezeichner
error C2065: 'LOGON_WITH_PROFILE' : nichtdeklarierter Bezeichnerhabe auch
/* Einbinden der Advapi32.lib nicht vergessen!!! */
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <tchar.h>eingebunden.
Braucht man wirklich das update, was Hepi geschrieben hat ??
Das sin 200 MB aus dem Netz
Gruß andy_mann
-
andy_mann schrieb:
Braucht man wirklich das update, was Hepi geschrieben hat ??
jep, wär net schlecht
-
andy_mann schrieb:
Braucht man wirklich das update, was Hepi geschrieben hat ??
Das sin 200 MB aus dem Netz
Kommt ganz drauf an, was für eine Version Du momentan hast.
Hast Du nie ein Platform SDK gezogen und installiert und benutzt VC 6, dann ist Dein SDK auf dem Stand von Win98 (geschätzt)...
Da es aber Deine gewünschte Funktion erst ab Windows 2000/XP/Server 2003 gibt, kennt evtl. Dein PSDK diese Funktion gar nicht...
Du brauchst also ein PSDK, welches für die entwicklung von Software für Win2000/XP gedacht ist.
Es sind knapp 340 MB zum saugen. Evtl. kennst Du wen mit DSL/Flatrate/Brenner, der könnte dir das herunterladen und auf CD brennen...
-
ahja,
das könnte natürlich ein grund sein.
Werde ich mal machen. Und anschließend mal neu testen.
Vielen Dank noch für die Links...
Gruß
andy_mann
-
Hallo Leute,
habe mir jetzt die 340 MB gesaugt entpackt und anschließend Installiert.
Bei der Installation gabe es keine Fehler.
Dennoch wird die Funktion "CreateProcessWithLogonW" nicht erkannt.
Muß man die SDA eventuell noch gesondert einbinden ??
Noch zu Installation.
Ich habe vor längerem schon die MDAC 2.8 drauf geschmissen.
SDK will ja 2,7 installieren.
Habe alles was zum installieren angklickt und installiert.
Keine Fehlermeldung.Bis auf dass er mir die zu installierende
Core SDK
Core SDK (Windows Server 2003) ist installiertund dann die
Microsoft Data Access Components (Version 2.7)
WMI SDK
Tablet PC SDK
Windows Media Services SDK
Internet Development SDK (Version 6.0)
Internet Information Server SDK (Version 5.1)
Windows Installer SDK (Version 2.0)
zum anklicken anzeigt, ich dieses auch mache, anschließen aber nicht als installiert gekennzeichnet ist.Kanns daran liegen ??
Gruß
andy_mann
-
Du müßtest jetzt noch in Deiner IDE (was benutzt Du? VC6?) dafür sorgen, das die Ordner des PSDK an oberster Stelle stehen (quasi als erstes eingelesen werden).
-
Ich benütze VS 6.0
wahrscheinlich demnächst .net
wie mache ich das mit der Einstellung ??
Gruß
andy_mann
-
Extras --> Optionen --> Verzeichnisse
"Include" und "Bibliothekdateien", da sollten die Ordner vom PSDK ganz oben in der Liste stehen...