Hallo, ich möchte mit einem kleinen Programm 7-Zip starten und ein bestimmtes Verzeichnis mit all seinen Unterverzeichnissen komprimieren. Versuche es schon seit Tagen mit dem Befehl: CreateProcess(...,Kommandozeile,...) Die Kommandozeile sieht so aus: c:\\> 7z.exe a -tzip "+base_archive_File+" "+test+" -r Kann mir bitte jemand sagen, wo der Fehler ist, bzw. wie ich es machen muß. Viele Grüße Markus
Du willst ein Kommandozeilentool mit einem selbst geschriebenen Programm starten, richtig? Da Du was von "c:\" schreibst, nehme ich an, Du willst das unter Windoof laufen lassen. Schau Dir mal die API-Funktion ShellExec an.
Wenn CreateProcess fehlschlägt, dann wird das an den übergebenen Parametern liegen. Beschreib' doch mal, wie exakt Du CreateProcess aufrufst (und nenne nicht nur einen der Parameter)
STARTUPINFO si; PROCESS_INFORMATION pi; memset (&si, 0, sizeof (si)); si.cb = sizeof (si); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; if (CreateProcess (NULL, "c:\\> 7z.exe a -tzip \"+base_archive_File+\" \"+test+\" -r", NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) { MessageBox (GetActiveWindow(), "Hat nicht geklappt", NULL, MB_ICONEXCLAMATION); } So müsste es eigentlich klappen. Gruss Christian
Hier ist mein Code: AnsiString newZipFile, test, base_archive_File; test="TestDir\\*"; base_archive_File="""7ziptest.zip"""; newZipFile="c:\\> 7z.exe a -tzip "+base_archive_File+" "+test+" -r"; memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW |STARTF_USESTDHANDLES; si.wShowWindow = SW_SHOWNORMAL; if(!CreateProcess(ZipPath.c_str(), //Prog.-.exe Pfad newZipFile.c_str(), //Argument NULL, //Security NULL, //Security FALSE, //inherits handles 0, NULL, NULL, &si, &pi)) { ShowMessage("Archivierung konnte nicht durchgeführt werden."); } es geht um das Verzeichnis TestDir(mit Unterverzeichnisse) auf c:
Und? Was meinst Du, was CreateProcess aus dem folgenden String machen soll? "c:\\> 7z.exe a -tzip "+base_archive_File+" "+test+" -r"; CreateProcess versucht einen Prozess mit dem Namen c:\> zu starten. Es gibt zwei Möglichkeiten, CreateProcess mitzuteilen, was es aufrufen soll. Die eine, die Du hier anwendest, nämlich alles in einem String, setzt zwingend voraus, daß Exe-Dateiname und Argumente durch Leerzeichen voneinander getrennt sind. Der erste Teilstring muss den Dateinamen der Exe-Datei enthalten, entweder mit absolutem Pfad oder aber - wenn der in der Environmentvariablen "PATH" enthalten ist, ohne. Alternativ kann der Exe-Dateiname nebst Pfad auch als separates Argument übergeben werden, dann aber muss das zweite Argument nur noch die Kommandozeilenargumente enthalten. Unabhängig davon ist als ein weiteres Argument noch das Arbeitsverzeichnis für den Prozess zu übergeben. CreateProcess(NULL, "c:\\programme\\sevenzip\\7z.exe a -tzip 7ziptest.zip c:\\TestDir\\* -r", NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, "c:\\temp", // Arbeitsverzeichnis &SInfo, &PInfo); CreateProcess("c:\\programme\\sevenzip\\7z.exe", "a -tzip 7ziptest.zip c:\\TestDir\\* -r", NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, "c:\\temp", // Arbeitsverzeichnis &SInfo, &PInfo); (hier jetzt mal angenommen, daß 7z.exe im Verzeichnis c:\programme\sevenzip residiert) Was sollen die vielen Anführungszeichen in Deinen Strings?
Die vielen Anführungszeichen kannst du vergessen, wollte nur etwas ausprobieren. Danke für die Mühen, aber es funktioniert mit diesen Befehlen immer noch nicht. Bin langsam echt am verzweifeln. Ich benutze von 7-Zip die Version 3.13! Ist bei der evtl. die Kommandozeile etwas anderst?
Ob die Kommandozeilenargumente von 7zip korrekt sind oder nicht, lässt sich ja leicht durch Eintippen derselbigen in ein Kommandozeilenfenster selbst ausprobieren. "Es funktioniert immer noch nicht" ist eine urst präzise Fehlerbeschreibung - wird 7zip nicht aufgerufen oder stimmen die - wie erwähnt von Dir selbst überprüfbaren Kommandozeilenargumente nicht? Welchen Installationspfad verwendest Du denn? Der von mir angegebene ist natürlich aus der Luft gegriffen und muss nicht die Realitäten Deines Rechners widerspiegeln (woher sollte ich die kennen?).
@Markus >newZipFile="c:\\> 7z.exe a -tzip "+base_archive_File+" Wenn das wirklich das Kommando sein soll, was da ausgeführt werden soll, dann muss ich Rufus Recht geben. Damit wird "c:\>" ausgeführt (mit Betonung auf >). Beherzige einfach den Tip von Rufus: >Ob die Kommandozeilenargumente von 7zip korrekt sind oder nicht, >lässt sich ja leicht durch Eintippen derselbigen in ein >Kommandozeilenfenster selbst ausprobieren. Ich glaube, dass Dein Problem nicht mit der Funktion CreateProcess, sondern eher mit der korrekten Ausführung des Kommandos in dem Kommandozeilenfenster zu tun hat.
Ihr habt Recht gehabt!!! Habe das Programm im DOS-Fenster aufgerufen und es hat auf Anhieb geklappt. War also ein Fehler in der Kommandozeile. Hier ist die Lösung: "C:\Programme\7-Zip\7z a -rtzip testFile.zip TestDir\\* " Vielen Dank für eure Mühen,bin noch ein Programmierneuling und deshalb geht es bei mir noch nicht so schnell. Nochmals Danke!!!!!!!!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.