Ich entwickle eine Desktop-basierte Anwendung mit VB, ähnlich wie addremove Programm. Alles funktionierte gut, bis ich anfange, an der Uninstallfunktion zu arbeiten. Nun, was bin ich tun, ist, dass ich die Deinstallation String der spezifischen Anwendung aus der Registrierung und verwenden Sie System. Diagnostics. Process ausgeführt UninstallString. Letztere fand ich, dass es nur für gerade Dateipfade nur, ich meine mit kein Kommandozeilenargument wie: Ich mache eine Liste der Liste aller UninstallStrings aller Anwendung auf meinem Computer installiert. Ich habe einige Dinge wie die Anwendung installiert mit MSI, einige waren mit rundll32 und einige waren mit geraden Dateipfad mit einigen Befehlsargument wie: My Silverlight SDK UninstallString, MSI Beispiel My JetAudio UninstallString, RunDll32 Beispiel 1Ctor. dll, LaunchSetupquotC: Program FilesInstallShield Installationsinformation Setup. exequot - l0x9 Mein Google Chrome UninstallString, gerader Dateipfad mit Befehls-Argumentbeispiel quotC: Program FilesGoogleChromeApplication5.0.375.55Installersetup. exequot - uninstall Der oben erwähnte Code i funktioniert nicht für diese. Ich habe einige String-Parsing, separate zwei Dinge von UninstallString eine ist Dateiname und andere ist Argumente. Wie für MSI, Dateiname ist MSIEXEC. EXE und Argument wird Rest der Zeichenfolge, das gleiche für RunDLL32, das gleiche für geraden Dateipfad mit Befehls-Argument. Nun, was bin ich vor, dass, nach jeder 2 oder 3 Tage, die ich zu wissen, dass diese Art von unistallstring funktioniert auch nicht funktioniert. Und warum funktioniert das nicht, weil es ein neuer Typ ist vielleicht abc C: Programm filessomeapp. exe - ddd so analysieren es auch. Gibt es eine bessere Möglichkeit, dies zu tun, anstatt dann die Analyse der Zeichenfolge. Gt und Microsoft. VisualBasic. dll ist nicht Teil von Framwork. Es wird immer als Teil des Framework installiert. VB-Programme verwenden diese Baugruppe intern für bestimmte Operationen, auch wenn Sie keine bestimmten Anrufe an sie, die Sie kennen, nicht machen. Der einzige Grund, den ich denken kann, nicht verwenden, wäre es, wenn Sie fühlen, es ist hässlich legacy. In dieser Situation Ihre Entscheidungen im Grunde sind, um die Zeichenfolge in ihre Dateinamen und Argumente Komponenten analysieren PInvoke die CreateProcess API mit NULL für lpApplicationName und die vollständige Befehlszeile für lpCommandLine. Als Antwort markiert von Sakhawat Ali Samstag, Mai 29, 2010 9:37 PM Legacy ist der wichtigste Punkt, den ich nicht verwenden möchten. Also ich denke, es besser zu analysieren. Ich frage mich, warum sie nicht so etwas in Framework (ohne Microsoft. VisualBasic. dll). Auf jeden Fall danke, es war schön, mit dir zu diskutieren. Als Antwort markiert von Sakhawat Ali Samstag, 29. Mai 2010 21:37 Alle Antworten gt Ich habe festgestellt, dass es nur für gerade Dateipfade Arbeit nur Sie müssen die Argumente Teil in proc. StartInfo. Argumente . Gt und Microsoft. VisualBasic. dll ist nicht Teil von Framwork. Es wird immer als Teil des Framework installiert. VB-Programme verwenden diese Baugruppe intern für bestimmte Operationen, auch wenn Sie keine bestimmten Anrufe an sie, die Sie kennen, nicht machen. Der einzige Grund, den ich denken kann, nicht verwenden, wäre es, wenn Sie fühlen, es ist hässlich legacy. In dieser Situation Ihre Entscheidungen im Grunde sind, um die Zeichenfolge in ihre Dateinamen und Argumente Komponenten analysieren PInvoke die CreateProcess API mit NULL für lpApplicationName und die vollständige Befehlszeile für lpCommandLine. Als Antwort markiert von Sakhawat Ali Samstag, Mai 29, 2010 9:37 PM Legacy ist der wichtigste Punkt, den ich nicht verwenden möchten. Also ich denke, es besser zu analysieren. Ich frage mich, warum sie nicht so etwas in Framework (ohne Microsoft. VisualBasic. dll). Auf jeden Fall danke, es war schön, mit dir zu diskutieren. Markiert als Antwort von Sakhawat Ali Samstag, 29. Mai 2010 21.38 Uhr Nehmen Sie einen Blick auf alle Warnungen auf der Shell-Dokumentation Seite. Wenn das System es aufspaltet, kann es eine Möglichkeit der Zweideutigkeit geben, wo der Programmname endet, und die Dokumentation zeigt, wie dies Sicherheitsverzweigungen haben kann. Ja, mit der Shell-Funktion, dies zu tun, aber wie zu warten, bis deinstallieren Programm abgeschlossen Mittwoch, 12. Februar 2014 12:07 PM Microsoft führt eine Online-Umfrage, um Ihre Meinung über die zu verstehen Msdn-Website. Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen. WaitForExit-Methode (Int32) WaitForExit (Int32) macht den aktuellen Thread, bis der zugehörige Prozess beendet wird. Es sollte aufgerufen werden, nachdem alle anderen Methoden auf den Prozess aufgerufen werden. Verwenden Sie das Ereignis Exited, um zu verhindern, dass der aktuelle Thread blockiert wird. Diese Methode weist die Prozesskomponente an, eine endliche Zeitdauer zu warten, bis der Prozess beendet wird. Wenn der zugehörige Prozess nicht durch das Ende des Intervalls beendet wird, da die Anforderung zum Beenden verweigert wird, wird false an die aufrufende Prozedur zurückgegeben. Sie können eine negative Zahl (unendlich) für Millisekunden angeben. Und Prozess. WaitForExit (Int32) verhält sich wie die WaitForExit () - Überlastung. Wenn Sie 0 (Null) an die Methode übergeben, gibt sie nur true zurück, wenn der Prozess bereits andernfalls beendet ist, gibt es sofort false zurück. In den Framework 3.5 und früheren Versionen, wenn Millisekunden -1 war, wartete die WaitForExit (Int32) Überlastung für MaxValue Millisekunden (ca. 24 Tage), nicht unbegrenzt. Wenn die Standardausgabe zu asynchronen Ereignisbehandlungsroutinen umgeleitet wurde, ist es möglich, dass die Ausgabeverarbeitung nicht abgeschlossen ist, wenn diese Methode zurückgegeben wird. Um sicherzustellen, dass die asynchrone Ereignisbehandlung abgeschlossen ist, rufen Sie die WaitForExit () - Überladung auf, die nach dem Empfangen eines True von dieser Überladung keinen Parameter übernimmt. Legen Sie die SynchronizingObject-Eigenschaft fest, um sicherzustellen, dass das Exited-Ereignis in Windows Forms-Anwendungen ordnungsgemäß behandelt wird. Wenn ein zugehöriger Prozess beendet wird (wird vom Betriebssystem durch eine normale oder abnormale Beendigung beendet), speichert das System Verwaltungsinformationen über den Prozess und kehrt zu der Komponente zurück, die WaitForExit (Int32) aufgerufen hatte. Die Process-Komponente kann dann auf die Informationen zugreifen, zu denen auch die ExitTime gehört. Indem Sie den Handle für den beendeten Prozess verwenden. Da der zugehörige Prozess beendet ist, weist die Handle-Eigenschaft der Komponente nicht mehr auf eine vorhandene Prozessressource hin. Stattdessen kann der Handle nur verwendet werden, um auf die Betriebssystem-Informationen über die Prozessressource zuzugreifen. Das System ist sich bewusst, dass Prozesse, die nicht von Process-Komponenten freigegeben wurden, von Handles erkannt werden, sodass die ExitTime - und Handle-Informationen im Speicher bleiben, bis die Process-Komponente die Ressourcen freigegeben hat. Wenn Sie Start für eine Prozessinstanz aufrufen, rufen Sie deshalb Close auf, wenn der zugehörige Prozess beendet wurde und Sie keine Verwaltungsinformationen mehr benötigen. Schließen beendet den Speicher, der dem beendeten Prozess zugewiesen ist.
No comments:
Post a Comment