Externes Programm starten ohne Process?

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von ThomasG82.

    Externes Programm starten ohne Process?

    Moin zusammen,

    Ich starte normal ein Programm.
    Aus diesem Programm hatte ich mit (...New Process..usw.) ein zweites Programm gestartet.
    Das hat bisher ohne Probleme funktioniert.
    Neuerdings darf das zweite Programm (nach einem Update) in keinem Thread laufen. Ist mir zwangsmässig vorgegeben.
    Getestet habe ich es und es geht auch nicht.
    Nun muss ich das zweite Programm irgendwie anders starten.
    Hat jemand eine Idee?

    Gruß Roberto

    Roberto schrieb:

    Neuerdings darf das zweite Programm (nach einem Update) in keinem Thread laufen.
    Sondern :?: :?: :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Roberto Wie äußert sich das?
    Dann lass mal das Starten per Process-Klasse mal in einem anderen Thread stattfinden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielleicht postest du mal den relevanten Code anstatt diesen immer nur anzudeuten.

    ich starte ein anderes Programm in der Regel so: Process.Start(„...Mein\Pfad\Programm.exe“)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mrMo“ ()

    @Roberto Kann es sein, dass das andere Programm als Admin gestartet werden muss?
    Dann solltest Du Dein startendes Programm auch als Admin laufen lassen.
    Probiere dies, das geht testweise im Explorer: Starten mit Administrator-Rechten aus dem Kontext-Menü.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mit dem Update habe ich den wichtigen Hinweis bekommen, dass das zweite Programm
    im Thread nicht funktioniert. Auch nicht als Admin. Schon getestet.
    Deshalb ist Process usw. damit hinfällig.
    Situation ist jetzt etwas verzwickt.
    Eigenständig funktioniert das zweite Programm.
    Die einzige Möglichkeit die z.Zt. sehe ist, das zweite Programm
    eigenständig zu starten. Also außerhalb von ersten Startprogrammm.
    Ich verstehe die ganze Situation nicht. Du sagtest du hättest aus dem ersten Programm mit new Process.... ein weiteres Programm gestartet. Von welchem Programm ist denn dann das Update? Wenn du doch Zugriff auf den Quellcode hast sollte das doch lösbar sein.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Du nix wolle zeige code für mache uns klarer wo problem?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Es gibt vom aufzurufendem Programm kein Quellencode.
    Es ist ein Update fertig als EXE kompiliert.

    Hier ein Auszug aus meinem Startprogramm.
    ...
    Dim proc As Process = New Process()
    proc.StartInfo.FileName = "C:\t1\w1\fribo.exe"
    proc.Start()
    proc.WaitForExit()
    ...
    fribo. exe separat gestartet gibt keine Probleme.
    Aus dem Startprogramm wird fribo.exe einfach ignoriert
    und somit nicht aufgerufen. fribo.exe ist nicht von mir.
    fribo,exe bekomme ich fertig kompiliert als EXE-File(update).
    Deutlicher kann ich es leider nicht mehr sagen.
    @Roberto Probierma Dein Programm von x86 auf x64 bzw. anders herum umzustellen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielleicht musst du dem aufrufenden Programm seinen Pfad als Umgebungsvariable mitgeben.
    Ich weiß nicht ob das aus C# stammende Beispiel brauchbar übersetzt ist.

    VB.NET-Quellcode

    1. Dim process As Process = New Process()
    2. With process
    3. Dim startInfo As New ProcessStartInfo(path, arguments)
    4. With startInfo
    5. .WindowStyle = ProcessWindowStyle.Normal
    6. .WorkingDirectory = Path.GetDirectoryName(path)
    7. End With
    8. End With
    9. process.Start(startInfo)
    10. If process IsNot Nothing AndAlso process.HasExited <> True Then
    11. process.WaitForExit()
    12. Else
    13. '
    14. End If

    Roberto schrieb:

    Neuerdings darf das zweite Programm (nach einem Update) in keinem Thread laufen. Ist mir zwangsmässig vorgegeben.
    Mir sieht das so aus, als wolle der Hersteller nicht, dass sein Proggi per Process.Start ausgeführt wird.
    Wenn er diesbezüglich Vorkehrungen getroffen hat, die das verhindern, dann fürchte ich, wird es nicht gehen.
    Weil man muss davon ausgehen, auf Herstellerseite sind Profis am Werk, die sich ausführlich mit dem Thema beschäftigt haben.
    So lange mitgelesen und jetzt will ich es auch mal schlau probieren.
    Mal ein anderer Ansatz :
    Wie wäre es wenn du dir ne simple temporäre Variable bastelst in der du einen CommandLine Befehl implementierst, sprich über CMD oder PowerShell und diese dann deine fibro.exe aufruft?
    Damit würde es ja nicht aus deinem Programm heraus kommen sondern wie ein direkter Aufruf über die Programmauswahl. Das sollte ja gehen, denn dein Process.Start ruft ja nur die PowerShell oder CMD auf, nicht das Programm.
    Oder du erstellst temporär beim aufrufen der Schrittes DeinButton.Click eine Verknüpfung, welche du aufrufst und die wiederum ruft das Programm auf. Damit dürfte auch ein eigener Thread erstellt werden und der Punkt Process.Start geht auch nicht direkt auf fibro.exe und sollte somit, wenn der in dem Programm am Anfang abgefragt wird (was ja scheinbar so ist) nicht negativ ausfallen.

    Es scheint ja hier darum zu gehen, dass fibro.exe verhindert durch ein anderes Programm, aufgrund Copyrights oder Lizenzen, aufgerufen zu werden.
    Zu EDR am 18.Febr....
    Ja eindeutig, so ist es.

    Zu ThomasG82...
    So ganz verstehe ich nicht wie du das meinst.
    Ich müsste dann aus dem ersten Programm CMD bzw. PoweShell aufrufen. Wenn ich aber das mit Process..
    aus dem ersten Programm machen soll, nützt mir das auch nicht viel.
    Übrigends, es geht hier nicht um Copyrights od. Lizenzen. Eher vermute ich, dass der Hersteller aus
    programmiertechnischen Gründen ein Thread verhindern will. Wie EDR schon vermutete.
    @Roberto Hast Du den Code von @Dksksm getestet?
    Hast Du Deinem Prozess sein eigenes Verzeichnis als Arbeitsverzeichnis mitgegeben?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Roberto schrieb:

    ein Thread verhindern will
    Was auch immer das Bedeutet...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen