Ich habe eine Situation, wo ich eine Datei ausführen möchten, und löschen Sie die ausführbare Datei, wenn die Ausführung abgeschlossen ist. Ich verwende System. Diagnostics. Process. Start (), um die Datei auszuführen, und verwenden Sie. WaitForExit (), um zu warten, bis der Prozess abgeschlossen ist. Ich verwende dann File. Delete (Dateiname), um die ausführbare Datei zu löschen. Das Problem ist, dass manchmal File. Delete mit dem folgenden Fehler fehlschlägt: Das führt mich zu glauben, dass irgendwie der Prozess noch am Leben ist und die ausführbare Datei sperren, auch nachdem der. WaitForExit () - Aufruf zurückgegeben wird. Ich habe andere Threads im Netz gefunden, die das gleiche Verhalten beschreiben, aber ich habe keine gefunden, die mit einer vernünftigen Erklärung oder Lösung des Problems abschließen, außer Anregungen, einen Sleep (n) nach dem WaitForExit () zu platzieren. Beispiele: Hier ein Beispielprogramm, das das Problem für mich reproduziert. Ich habe auf Windows XP und Windows 7 getestet, und sie beide schließlich scheitern an einem gewissen Punkt mit dem gleichen Fehler. Beachten Sie auch, dass die ss. exe-ausführbare Datei eine einfache einfache Hello Worldquot-Konsolenanwendung ist. Und die Ausgabe sieht typischerweise so etwas aus (mit unterschiedlicher Anzahl von Iterationen vor dem Absturz): Irgendwelche Ideen, warum dies geschieht, und wenn es einige Fix für diese (außer Putting Schlaf in den Code) Freitag, 8. Januar 2010 3 : 40 PM Der Grund ist, dass, obwohl der Prozess abgeschlossen ist, kann es ein paar Millisekunden für das Betriebssystem bis zum Ende der Zerstörung dauern. Es ist ein Multitasking-Betriebssystem, nachdem alle, seine versucht, alle zur gleichen Zeit Service. Unglücklicherweise gibt es keine Möglichkeit, zu wissen, wann die Datei nicht mehr gesperrt ist (vorsätzlich). Wenn Sie WaitForExit, erstellen Sie ein Sperrobjekt auf dem Prozessobjekt. Das Prozessobjekt kann nicht zerstört werden, bis die Sperre freigegeben wird und Sie können nicht auf etwas warten, das nicht vorhanden ist (Huhn und Eiart von Ausgabe). Also die einzige vernünftige Sache, die Sie tun können, ist immer wieder versuchen, so etwas wie: Marked als Antwort von Samuel Stanojevic Freitag, den 08. Januar 2010 um 16:20 Uhr Editiert von Tergiver Freitag, 8. Januar 2010 16.20 Uhr geändert, um bool, Endlosschleife Fix Freitag, 08. Januar 2010 16:15 Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmenMsiexec. exe-Befehlszeile Die Windows Installer-Technologie verwendet Msiexec. exe für die Installation von MSI - und MSP-Paketen. Dieses Tool bietet Ihnen die volle Kontrolle über den Installationsvorgang, mit dem Sie festlegen können: Installationsoptionen (Installieren, Deinstallieren, Verwalten der Installation, Anzeigen eines Produkts) Anzeigeoptionen (vollständige, einfache oder keine Benutzeroberfläche während der Installation) (Nur für ein installiertes Paket) Öffentliche Eigenschaften, die von der Installation verwendet werden Die übliche Form der msiexec-Befehlszeile ist folgende: Installationsoptionen Beim Starten einer Installation Können Sie den Installationstyp über folgende Optionen einstellen: i - normale Installation a - administrative Installation j - das Produkt anwerben u - an den aktuellen Benutzer werben m - an alle Benutzer melden g - die Sprachkennung, die von dem beworbenen Paket verwendet wird t - Anwenden transformieren, um Paket zu veröffentlichen x - Paket deinstallieren Beispiel Befehlszeile: Anzeigeoptionen Die Benutzeroberfläche der Installation kann entsprechend der Zielumgebung konfiguriert werden. Beispielsweise sollte ein Paket, das an Clients verteilt wird, über eine vollständige Benutzeroberfläche verfügen, während ein Paket, das über Gruppenrichtlinien bereitgestellt wird, über keine Benutzeroberfläche verfügt. Msiexec. exe legt die UI-Ebene der Installation über diese Optionen fest: leise - ruhiger Modus (keine Benutzerinteraktion) passiver - unbeaufsichtigter Modus (die Installation zeigt nur eine Fortschrittsleiste) q - Festlegung der Benutzeroberfläche: n - keine Benutzeroberfläche n - keine UI mit Ausnahme eines modalen Dialogfeldes, das am Ende angezeigt wird. B - Basic UI b - grundlegende Benutzeroberfläche mit einem modalen Dialogfeld am Ende angezeigt. Das modale Feld wird nicht angezeigt, wenn der Benutzer die Installation abbricht. Verwenden Sie qb oder qb, um die Schaltfläche Abbrechen auszublenden. B - - grundlegende Benutzeroberfläche ohne modale Dialogfelder. Bitte beachten Sie, dass qb - keine unterstützte Benutzeroberfläche ist. Verwenden Sie qb - oder qb-, um die Schaltfläche Abbrechen auszublenden. R - reduzierte Benutzeroberfläche f - vollständige UI Beispiel-Befehlszeile: Neustart-Optionen Manchmal überschreibt eine Installation Dateien, die verwendet werden, oder muss den Computer neu starten, um sie zu beenden. Die von der Installation verwendete Reboot-Richtlinie kann über diese Optionen eingestellt werden: norestart - das Gerät wird nach Abschluss der Installation nicht neu gestartet. - Der Benutzer wird aufgefordert, einen Neustart für den Vorgang durchzuführen - das Gerät wird nach der Installation neu gestartet Complete Beispiel-Befehlszeile: Protokollierungsoptionen Beim Debuggen eines Installationspakets können Sie mehrere Protokollierungsparameter verwenden, um ein Protokoll zu erstellen. Dieses Protokoll enthält verschiedene Informationen für jeden verwendeten Parameter: L - Aktivieren der Protokollierung i - Einbeziehen von Statusmeldungen w - Einschließen von nicht tödlichen Warnungen e - Einbeziehen aller Fehlermeldungen a - Erwähnen, wann eine Aktion gestartet wird; - umfassen Benutzeranforderungen c - umfassen die anfänglichen UI-Parameter m - beinhalten Out-of-Memory - oder fatale Exit-Informationen o - umfassen Out-of-Disk-Speicher-Nachrichten p - umfassen Terminal-Eigenschaften v - ausführliche Ausgabe x - umfassen zusätzliche Debugging-Informationen - An eine bestehende Protokolldatei anhängen - alle Zeilen in das Protokoll protokollieren - alle Informationen mit Ausnahme des v - und x-Optionenprotokolls - das Äquivalent von l Beispielbefehlszeile: Aktualisierungsoptionen Die Windows Installer-Befehlszeile kann Updates anwenden oder entfernen (z ) Über diese Optionen: p - installieren Sie einen MSP-Patch. Wenn Sie einen Patch leise installieren, müssen Sie die REINSTALLMODE-Eigenschaft auf ecmus und REINSTALL auf ALL setzen. Andernfalls aktualisiert das Patch einfach die auf dem Zielcache gespeicherte MSI. Update - Updates anwenden (wenn mehrere Updates vorhanden sind, können Sie sie durch das Zeichen trennen). Deinstallieren - Entfernen eines Updates für ein Produkt (falls mehrere Aktualisierungen vorhanden sind, können Sie sie durch das Zeichen trennen) Paket - gibt das Paket an, für das das Update entfernt wird. Beispiel-Befehlszeilen: In der obigen Befehlszeile ist die erste GUID die Patchkennung GUID und die zweite ist der Produktcode des MSI, für den das Patch angewendet wurde. Reparaturoptionen Wenn Sie ein installiertes Paket haben, können Sie die Windows Installer - Befehlszeile für die Reparatur verwenden: f - reparieren Sie ein Paket p - reparieren Sie nur, wenn eine Datei fehlt o - reparieren, wenn eine Datei fehlt oder eine ältere Version installiert ist - reparieren, wenn Datei fehlt oder eine gleiche oder ältere Version installiert ist. - Reparatur, falls eine Datei fehlt oder eine andere Version installiert ist. C - Reparatur, falls eine Datei fehlt oder die Prüfsumme nicht mit dem berechneten Wert übereinstimmt Um alle erforderlichen benutzerspezifischen Registrierungseinträge reparieren zu können m - alle erforderlichen Computerspezifischen Registrierungseinträge reparieren - alle vorhandenen Verknüpfungen reparieren - die Quelle ausführen und das lokale Paket erneut speichern Beispiel-Befehlszeile: In der obigen Befehlszeile Die GUID ist der Produktcode des MSI, der repariert wird. Öffentliche Eigenschaften festlegen Der Name einer öffentlichen Eigenschaft enthält nur Großbuchstaben (zum Beispiel PROPERTY). Diese Art von Eigenschaften kann über die Befehlszeile wie folgt festgelegt werden: PROPERTYvalue. Beispiel-Befehlszeile:
No comments:
Post a Comment