Saturday 1 July 2017

Waitforexit Kein Prozess Ist Mit Diesem Objekt Verknüpft


Ich habe einen Windows-Service, der diesen Code enthält: Der Zweck dieses Codes ist ein IFilter-Extrakt auf einem Dokument, wir verwenden einen separaten Prozess, weil einige IFilter notorisch flockig sind. Jetzt läuft dieser Code auf Windows 7 und Server 2008 R2-Boxen gut, aber auf einem Windows Server 2003 wirft der WaitForExit sofort ein Es gibt keinen Prozess, der mit dieser Prozessobjekt-Ausnahme verknüpft ist. Der Prozess existiert und vervollständigt seine Aufgabe ohne Problem. Jeder, der dies gesehen hat, kann jemand Licht auf, warum WaitForExit würde diesen Fehler thow Wenn ich diesen Code in einer Konsolen-App und laufen es funktioniert auch auf der Windws Server 2003-Box als gut, daher scheint es ein bestimmtes Problem zu sein Ein Dienst auf einem Windows Server 2003-Feld. Der Fehler tritt auf, wenn du keinen HANDLE zum Prozess bekommst (also nicht warten kann). Stellen Sie sicher, dass Sie UseShellExecutefalse angeben, um die Wiederverwendung eines Prozesses zu verhindern. Auch kannst du die Bitness 32 vs 64 des Dienstes vs. die ausführbare Datei beschreiben Endlich versuchen Prozess Monitor und sehen, was es zeigt, passiert. Ndash Ben Feb 2 12 um 12:51 ben: I39ll geben UseShellExecutefalse einen Versuch. Bitterkeit ist ein guter Punkt. Der Windows 2003 Server ist ein 32-Bit-Server, so dass sowohl Service als auch ausführbare Datei als 32-Bit ausgeführt werden. Allerdings sind die Windows 7 und 2008 R2 Maschinen 64 Bit und beide Service und ausführbare Ausführung als 64 Bit laufen. So könnte es sein, das ist der Unterschied nicht die OS-Version. Ndash AnthonyWJones Wenn Sie Prozesse starten, mit der System. Diagnostics. Process Klasse kann das System entweder CreateProcess oder ShellExecuteEx Win32 verwenden. Bei der Verwendung von CreateProcess können nur ausführbare Dateien gestartet werden. Bei Verwendung von ShellExecuteEx. Jede Datei, die mit dem Befehl Start-Run von der Shell gestartet werden kann. Das sind aber ganz anders, um Prozesse zu starten. ShellExecuteEx beinhaltet die Shell und kann beispielsweise eine vorhandene Instanz von Word oder Excel verwenden, um ein Dokument zu öffnen, indem die unter dem Registrierungsschlüssel HKCRltprogidgtshellltverbgt gespeicherten Informationen verwendet werden. Dies kann z. B. mit DDE zum Suchen und Aktivieren einer vorhandenen Excel-Instanz erfolgen. Siehe Dokumentation zu ShellExecuteEx s SHELLEXECUTEINFO. Beachten Sie, dass ShellExecuteEx einen hProcess zurückgeben kann oder nicht, je nachdem, ob ein neuer Prozess gestartet wurde. Dies ist das Verhalten, das du siehst. CreateProcess ist eine untergeordnete Funktion und erstellt einen Prozess direkt und übergibt einfach die entsprechenden Argumente. Es gibt immer einen Prozess-Handle. Hinweis: Da Sie scheinen, eine ausführbare Datei zu starten, ist es ein wenig überraschend, dass kein hProcess von ShellExecuteEx zurückgegeben wird. Dennoch, wenn Sie wollen, um sicherzustellen, dass Sie einen Prozess-Handle, mit UseShellExecute false ist die richtige Sache zu tun. Ich beginne Prozess wie folgt System. Diagnostics. Process SetupGUIProcess neue System. Diagnostics. Process () SetupGUIProcess. StartInfo neue System. Diagnostics. ProcessStartInfo (strStartMenuPath quotProgramsAXYZ InternationalA2MC Setup. appref-msquot) SetupGUIProcess. Start () SetupGUIProcess. WaitForExit () Wenn das Programm an die Zeile WaitForExit gelangt, verursacht es eine Ausnahme quotNo Process ist mit diesem objectquot verknüpft. Der Prozess beginnt ok. Ich versuche, den anrufenden Thread zu blockieren, bis der Prozess beendet ist. Ist das der richtige Weg Donnerstag, Oktober 01, 2009 8:31 PM Lets hit the reset button real schnell. Ok, jetzt willst du das machen: 1. Installiere die App (siehe Codeprojekt-Artikel, wie man msiexec benutzt, um es zu tun). Verwenden Sie Prozess (ExecuteableOnCodeProject). 2. Warten Sie, bis die App mit der Installation von Process. WaitOne fertig ist. 3. Starten Sie den Executeable als einen anderen Prozess (vorinstalliert exe). 4. WaitForProcess () (Executeable Names Prozess) Und du hast den Quellcode Yea, alles was du tun musst, ist das Msi zu erstellen und es mit der Technik oben zu installieren. Ich werde nicht durch den ganzen Prozess der Installation eines MSI gehen, weil Ich kann nicht so gut einen Job machen, wie der Artikel in der Erklärung so etwas macht. Ich überkompliziert dies. Führen Sie die Anweisungen und lesen Sie den Artikel. Dies wird nicht zu kopieren-Paste, aber das ist, warum Sie bezahlt die großen Dollar richtig Gut Codierung beinhaltet das Erkennen von logischen Grenzen und erweitert sie als notwendig. Bei als Antwort von Bin-ze Zhao Montag, Oktober 05, 2009 8:16 PM Alle Antworten Das sieht aus wie der richtige Code Nicht sicher, was falsch sein könnte, es sei denn, der Prozess, den du anfängst, startet einfach einen anderen und endet dann, was dann bedeuten würde, dass der Prozess, auf den dein SetupGUIProcess verwiesen wurde, nicht mehr existiert hätte und WaitForExit dann möglicherweise illegal wäre. Alternativ ist vielleicht auch WaitForExit nicht gültig Wenn etwas über eine Vereinigung geöffnet wird, anstatt ein bestimmtes Programm zu öffnen. Und der Dateiname, den du angegeben hast, sieht nicht wie ein Exe aus (obwohl es auch sein könnte). Donnerstag, 01. Oktober 2009 um 8:55 Uhr. Sie können eine ClickOnce-Anwendung starten, indem Sie den Standort (z. B. eine Webadresse) angeben, von der aus Sie die Anwendung ursprünglich installiert haben. Starten Sie keine ClickOnce-Anwendung, indem Sie den installierten Speicherort auf Ihrer Festplatte festlegen. So sollten Sie dies nicht tun, indem Sie die Anwendungsreferenzdatei angeben. Sie sollten den Speicherort der urloriginal-Datei angeben, um den Prozess zu starten. Sie können diesen Ort sehen, indem Sie die Datei appref-ms mit einem Texteditor öffnen. Donnerstag, 01. Oktober 2009 um 9:00 Uhr Ich weiß sicher, dass der Prozess immer noch läuft, wenn WaitForExit aufgerufen wird. Ich weiß, ich beginne den Prozess mit Hilfe einer Clickonce-Referenz. Ich habe versucht, dies in allen verschiedenen Möglichkeiten, dass Sie einen Prozess starten können und die gleiche Ausnahme auftritt. Wenn ich den Prozess anfange, indem du gerade den Weg zum Start () weitergibst. Start gibt null zurück. Gibt es einen anderen Weg, um eine Anwendung zu starten, die von einem Clickonce installiert wird Schild anderen, dass durch die Referenz wäre ich interessiert zu sehen, ob ich könnte die exe direkt anrufen. Vielleicht würde die WaitForExit-Funktion das Prozessobjekt kennen. Das ist rätselhaft Vielen Dank für die Antwort Donnerstag, Oktober 01, 2009 9:04 PM Weve ging durch dieses vorher auf Ihrem vorherigen Gewinde. Stoppen Sie mit ClickOnce. Hans Passant Freitag, 02. Oktober 2009 um 12:09 Uhr Ich habe ein wenig Mühe, das alles zusammen zu machen. Ich glaube, ich verstehe diese Aussage nicht im Link zum ersten Artikel, den du mir in den anderen Beitrag gegeben hast: Ich habe keinen Server. Ich möchte nur Leute schicken 2 Installationsschilde gezippt. Sie installieren sie. Und eines der installierten Programme kann das andere als Prozess aufrufen und dann blockieren und warten, bis es fertig ist. Es ist mir immer noch nicht klar, was ich tun muss, damit ich das Programm mit dem oben genannten Sytax aufrufen kann. Brauche ich einen Trenner, um dies zu tun Wenn du sagst, mit ClickOnce zu stoppen. Meinst du, dass du es nennst, indem du es nennst, oder meinst du damit, es überhaupt zu benutzen und irgendeine andere Methode der deplayment zu benutzen. Ich glaube, ich verstehe wirklich nicht, was Click Once bedeutet. Ist der Begriff Click Once nur verkapseln die Bedeutung aller Installationsschilde durch die Publish-Option in Visual Studio Ich hoffe, Sie sehen, was ich kämpfe mit. Es muss hier etwas ganz einfach sein. Freitag, 02. Oktober 2009 14.29 Uhr Ich komme leider mit NoBugz einverstanden (wer das wohl besser versteht als ich). Also lasst uns darüber nachdenken, dass du und ich bist. Wenn du eine URL siehst, wirst du kein Live-Prozess abfeuern. Sie fragen den Server nach einigen Daten und es gibt einige Daten und dann wieder aus seinem Leben. Theres kein persistenter Zustand wie ein Prozess, den Sie erreichen können. Ihr Versuch, eine ClickOnce-Anwendung zu verwenden, die eine URL verwendet, also natürlich theres kein Prozess, weil genau was ich gerade durchgemacht habe. Stoppen Sie mit ClickOnce. Freitag, 02. Oktober 2009 14:37 Uh Ich weiß, ihr Jungs versucht zu helfen und ich schätze das, aber ich bekomme es immer noch nicht. Ich könnte mich nur darum kümmern, was passiert, wenn ich eine URL besuche und wie ich schon sagte, bevor ich nicht weiß, was du meinst, wenn du sagst. Wenn du einen Kommentar machen möchtest, kannst du eine Alternative vorschlagen. Ich möchte nur jemandem einen Weg geben, um zwei Programme zu installieren, die ich gemacht habe, und rufe einen von der anderen an und blockiere den Anrufprozess, bis der angerufene Prozess zurückkehrt. Es scheint irgendeine Art von Unterschied zwischen dem, was ich versuche zu tun und was Sie Jungs versuchen zu erklären. Ich habe das Gefühl, dass beide Beiträge, die ich gemacht habe, so weit von meinem eigentlichen Problem abgelaufen sind. Bitte kann jemand jemanden in irgendeiner Art von einfachen Begriffen oder Schritten brechen Vielleicht so etwas wie dieses Schritt 1 --------- Erstellen Sie eine installierbare App wie folgt Schritt 2. ---------- Rufen Sie es an Ich freue mich darauf, dass die Beiträge von deiner Frage abweichen. Deutsch: www. tab. fzk. de/de/projekt/zusammenf...ng/ab117.htm. Ihr Beispiel nutzt ClickOnce, das einzige Problem, das Ihr Erleben aufgrund der Tatsache ist, dass Sie ClickOnce verwenden. Das ist, warum die Leute sagen. Stoppe mit clickOnce. Vielleicht verstehst du nicht, was ClickOnce ist vs eine ausführbare Dies ist ein sehr einfaches Beispiel für genau das, was Sie versuchen, OHNE eine Clickonce zu tun. Freitag, 02. Oktober 2009 um 3:47 Uhr Nun, wenn du ein MSI benutzt hast und msiexec. exe ausführen solltest, um die Applikation zuerst zu installieren (WaitForExit dazu benutzen, um zu beenden, wenn du Schwierigkeiten hast, den Codeprojekt Link für eine Alternative zu sehen) Nachdem dieser Prozess abgeschlossen ist, führen Sie die Prozess-EXE-Datei aus, an diesem Punkt sollten Sie in der Lage sein, WaitForExit () für Ihr neu installiertes Programm aufzurufen. Wenn Sie es wünschen, auf vorhandene Versionen der App zu überprüfen, dann ist Ihr immer ein Level komplizierter und sollte dieses Codeprojekt-Beispiel ansehen. Freitag, 02. Oktober 2009 17:05 Vielen Dank für die Antwort. Ich bekomme was dein Sprichwort. Das ganze Problem ist, weil ich den Klick einmal Referenz und nicht eine tatsächliche exe rufen. Ich habe ein paar Fragen. 1. Ist der Klick einmal Referenz Referenzierung ein Exe würde ich gerne die Exe aufrufen. Ich kann einfach nicht irgendwo auf dem System finden. Gibt es einen bestimmten Pfad, wo es platziert wird, wenn ein Veröffentlichen klicken Sie auf eine Installationsschild ausgeführt wird 2. Wenn die Antwort auf die obige Frage nein ist. Dann wird dies ein Problem der Installation der ersten Anwendung mit dem Prozess exe Ich versuche zu nennen und all seine Abhängigkeiten Danke für Ihre Geduld Freitag, 02. Oktober 2009 17:12 Vielen Dank für die Antwort. Ich bekomme was dein Sprichwort. Das ganze Problem ist, weil ich den Klick einmal Referenz und nicht eine tatsächliche exe rufen. Ich habe ein paar Fragen. 1. Ist der Klick einmal Referenz Referenzierung ein Exe würde ich gerne die Exe aufrufen. Ich kann einfach nicht irgendwo auf dem System finden. Gibt es einen bestimmten Pfad, wo es platziert wird, wenn ein Veröffentlichen klicken Sie auf eine Installationsschild ausgeführt wird 2. Wenn die Antwort auf die obige Frage nein ist. Dann wird dies ein Problem der Installation der ersten Anwendung mit dem Prozess exe Ich versuche zu nennen und all seine Abhängigkeiten Danke für Ihre Geduld Don Es gibt ein Logik Problem mit Ihren Fragen. 1. Nehmen wir an, Sie wussten, wo die Exe war. Sie haben es mit einem Prozess gestartet. Nach 2 gibt es Abhängigkeiten, also bläst dein Programm. Wie beheben Sie das Sie müssen das Programm installieren, bevor Sie versuchen, die Exe laufen. Also, was tun Sie tun Sie müssen die ursprüngliche Programme Lösung Datei für Visual Studio zu finden und erstellen Sie ein Installationspaket und bust es als MSI-Datei. Dann können Sie die Technik verwenden, die ich früher veröffentlicht habe, um das Paket zu installieren und es auszuführen. Problem: Wenn Sie das Paket installieren müssen, haben Sie nicht den Quellcode (weshalb ich davon ausgehen würde, dass Sie versuchen, eine Clickonce zu benutzen), dann sind Sie im Wesentlichen tot im Wasser mit Ihren Anforderungen. Kein Quellen-Epos scheitern. Freitag, 02. Oktober 2009 17:33 Sorry, ich verstehe es nicht. Lass uns Schritt für Schritt gehen. Dein Kommentar 1. Lass uns davon ausgehen, dass du wüsstest wo die Exe war. Sie haben es mit einem Prozess gestartet. Nach 2 gibt es Abhängigkeiten, also bläst dein Programm. Wie beheben Sie das Sie müssen das Programm installieren, bevor Sie versuchen, die Exe laufen. Mein Commemt Lets davon ausgehen, ich weiß nicht, wo die Exe ist (weil ich nicht), weil es nicht zu sein scheint eine nach der Installation der Klick einmal installieren Schild. Wenn es eine andere Möglichkeit gibt, eine Installations-Schild zu machen, so dass ich Zugang zu einer Exe habe. Können Sie bitte den Link zu der Dokumentation, die zeigt, wie es zu tun, müssen Sie die ursprüngliche Programme Lösung Datei für Visual Studio finden und erstellen Sie ein Installationspaket und bust es als MSI-Datei. Dann können Sie die Technik verwenden, die ich früher veröffentlicht habe, um das Paket zu installieren und es auszuführen. Mein Kommentar Ich habe die Original-Programme Lösung Datei für Visual Studio, da ich der Autor bin. Wenn ich ein MSI-Installationspaket erstellt habe und es als MSI-Datei wie Sie sagen, wird ich dann in der Lage sein, die Exe als Prozeß anzurufen. Wo wird es liegen Kannst du den Link zur Dokumentation geben, wie man das MSI erstellt, wenn In der Tat wird es ein Exe installieren Problem: Wenn Sie das Paket installieren müssen, haben Sie nicht den Quellcode (weshalb ich davon ausgehen würde, dass Sie versuchen, eine Clickonce zu verwenden), dann sind Sie im Wesentlichen tot im Wasser mit Ihren Anforderungen. Kein Quellen-Epos scheitern. Mein Kommentar Ich habe absolut den Quellcode und das Projekt. Der Grund, warum ich mit Klick einmal ist, weil es schien, ein einfaches für meine Kunden zu sein, um meine Anwendung mit allen Depencies zu installieren. Also habe ich alle diese Kunden mit meiner Anwendung installiert mit dem Klick einmal Ansatz. Nun, alles, was ich tun möchte, ist eine andere Anwendung mit einer Schaltfläche zu schreiben, die das erste aufruft und wartet, bis es fertig ist. Ist der Schlüssel zu diesem wirklich Verpackung die erste App (die, die ich anrufen möchte) als msi-Datei Nochmals danke für deine Geduld Freitag, 02. Oktober 2009 um 9:00 Uhr Lets Hit die Reset-Taste wirklich schnell. Ok, jetzt willst du das machen: 1. Installiere die App (siehe Codeprojekt-Artikel, wie man msiexec benutzt, um es zu tun). Verwenden Sie Prozess (ExecuteableOnCodeProject). 2. Warten Sie, bis die App mit der Installation von Process. WaitOne fertig ist. 3. Starten Sie den Executeable als einen anderen Prozess (vorinstalliert exe). 4. WaitForProcess () (Executeable Names Prozess) Und du hast den Quellcode Yea, alles was du tun musst, ist das Msi zu erstellen und es mit der Technik oben zu installieren. Ich werde nicht durch den ganzen Prozess der Installation eines MSI gehen, weil Ich kann nicht so gut einen Job machen, wie der Artikel in der Erklärung so etwas macht. Ich überkompliziert dies. Führen Sie die Anweisungen und lesen Sie den Artikel. Dies wird nicht zu kopieren-Paste, aber das ist, warum Sie bezahlt die großen Dollar richtig Gut Codierung beinhaltet das Erkennen von logischen Grenzen und erweitert sie als notwendig. Als Antwort von Bin-ze Zhao markiert Montag, Oktober 05, 2009 9:16 PM Freitag, 02. Oktober 2009 09:25 Uhr Microsoft führt eine Online-Umfrage durch, um deine Meinung zu verstehen Der Msdn-Website Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen?

No comments:

Post a Comment