CreateProcess: Parameter mitgeben?
-
Hallo,
ich möchte die msinfo32.exe mit dem Parameter "report" starten, um mir
Systeminfos in eine Textdatei umzuleiten. Da ich bei einem einfachen
ShellExecute nicht mitbekomme wann die msinfo32.exe mit ihrer Arbeit
fertig ist, dachte ich an CreateProcess.Hier war ich der Meinung es so verstanden zu haben, dass in den zweiten
Parameter die eigentlichen Paramter zur msinfo32.exe gehören.
Es scheint so jedoch nicht richtig zu sein:PROCESS_INFORMATION pi = {0}; STARTUPINFO si = {sizeof(si)}; si.wShowWindow = SW_NORMAL; ::CreateProcess( _T("C:\\programme\\gemeinsame dateien\\microsoft shared\\msinfo\\msinfo32.exe"), _T("/report c:\\reportfile.txt"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); ::WaitForSingleObject( pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); ::MessageBox( NULL, _T("Fertig!"), NULL, 0);
Vielleicht interpretiere ich die MSDN auch ganz falsch und man muss im
ersten Paremeter cmd.exe rufen und im zweiten dann den Pfad zur Exe inkl. Parametern
-
damit ich damals Argumente übergeben konnte, musste ich ein Leerzeichen davor machen:
_T(" /report c:\\reportfile.txt")
vielleicht liegt es daran.
-
Danke, ich habe es hinbekommen. Nun habe ich dann aber die beiden ersten
Parameter durch CStrings ausgetauscht, statt sie fest reinzuschreiben.
Diese CStrings werden jedoch zuvor noch in LPSTR umgewandelt.CreateProcess gibt mir nicht NULL zurück und dennoch wir keine *.nfo-Datei
geschrieben.CString newpfad = " /nfo c:\\test.nfo"; CString iu = "C:\\programme\\gemeinsame dateien\\microsoft shared\\msinfo\\msinfo32.exe"; PROCESS_INFORMATION pi = {0}; STARTUPINFO si = {sizeof(si)}; si.wShowWindow = SW_NORMAL; LPSTR OriginChar= iu.GetBuffer(iu.GetLength()); LPSTR parms= newpfad.GetBuffer(newpfad.GetLength()); BOOL chk = 0; chk = ::CreateProcess( OriginChar, parms, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); if(chk==NULL) { MessageBox("Fehler bei CreateProcess! GetLastError prüfen!"); //... } ::WaitForSingleObject( pi.hProcess, INFINITE);
//usw.
Hat jemand eine Idee warum hier keine nfo-Datei erzeugt wird?
-
Ich habe den blöden Verdacht, dass es an dem zu langen oder in irgendeiner Form wohl
ungültigem Pfad des zweiten Parameters liegt:C:\\Dokumente und Einstellungen\\Ben\\Eigene Dateien\\Visual Studio 2008\\Projects\\TestProjekt\\datei2.nfo
Sowas kurzes wie c:\\test.nfo funktioniert einwandfrei...
Gibt es eine Funktion um so lange Pfade irgendwie in sowas wie
C:\\Dokumente1\\Ben\\Eigene1\\Visual Studio 2008\\Projects\\TestProjekt\\datei2.nfo
umzuwandeln?
-
bette den pfad doch mal in " ein
"/nfo \"C:\\Dokumente und Einstellungen\\Ben\\Eigene Dateien\\Visual Studio 2008\\Projects\\TestProjekt\\datei2.nfo\""
-
So einfach kann das Leben sein. Ich danke dir für den Hinweis
Es sind demnach die Leerzeichen welche die Probleme verursacht haben.
-
Leg das Working directory korrekt fest dann kannst Du Dir die Pfadangabe sparen.
BTW: msinfo32.exe ist als Applikation registriert und wird auch ohne Pfadangabe gefunden wenn Du ShellExecute verwendest.
-
Hallo Martin,
vielleicht kannst du mir sagen, ob msinfo32.exe grundsätzlich in allen
Windowsversionen ab Windows XP verfügbar ist (inkl. 64bit Varianten)?
Dann spare ich mir die Anfrage bei MS
-
IMHO war das Tool auch schon bei Win9x dabei...
-
jup is bei xp 64-bit dabei
-
MSINFO32 auf 64bit... irgendwie interesant