ProcessStartInfo vs Process

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Wumpel.

    ProcessStartInfo vs Process

    Hey zusammen.
    Ich habe mal wieder ein Problem.
    Wahrscheinlich denke ich zu kompliziert - bräuchte da mal einen Hinweis von euch Profis.

    Ich habe eine Anwendung, die via Veröffentlichung bei uns im Unternehmen von den Anwendern im Benutzerkontext installiert und ausgeführt wird. Klappt wunderbar.
    Ein neuer Teil der Anwendung soll es sein bestimmte Hotfixes eines Drittherstllers zu installieren.
    Eigentlich installieren das mein Kollege und ich, indem wir uns remote auf dem Client anmelden und dann eine Batchdatei "ausführen als" und dann mit unseren ADMIN-Konten ausführen.

    Um den Prozess zu beschleunigen möchte ich diese Installation gerne halb-automatisieren.
    Dazu prüft meine App, ob eine Installation notwendig ist. Klappt.
    Dann ruft sie folgendes auf:

    VB.NET-Quellcode

    1. Dim myProcess As New Process()
    2. myProcess = Process.Start(HotfixInstallationBatch, sUser, myPassword, sDomain)


    Bei ca 80% der Clients funktioniert es. (Windows 7 bzw 10)
    Bei den anderen 20% bricht die Installation mit Fehlermeldung ab. Fehlermeldung lautet in etwa, dass Windows Administrator nicht mehr funktioniert. (Genauen Text kann ich nachreichen)

    Auf meinem Testclient bin ich mit lokalen Adminrechten angemeldet - kann dennoch nicht installieren. Es sei denn, ich verwende stattdessen

    VB.NET-Quellcode

    1. With procStartInfo
    2. .UseShellExecute = True
    3. .FileName = HotfixInstallationBatch
    4. .WindowStyle = ProcessWindowStyle.Normal
    5. .Verb = "runas" 'add this to prompt for elevation
    6. End With
    7. procExecuting = Process.Start(procStartInfo)


    Arg.
    Ist es möglich beides in ein Kommando zu bekommen?
    Also das Übergeben von Name und Passwort sowie das ".verb" um als Admin auszuführen?


    Dann wäre ich glücklich ^^
    so far...
    Wumpel


    ...manchmal ist es einfacher als man denkt...
    @Wumpel So was:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim myProcess As New Process()
    2. Dim procStartInfo = myProcess.StartInfo
    3. Dim sc As SecureString = New SecureString() '"myPassword"
    4. For Each o As Char In "myPassword".ToCharArray()
    5. sc.AppendChar(o)
    6. Next
    7. With procStartInfo
    8. .UseShellExecute = True
    9. .FileName = "HotfixInstallationBatch"
    10. .WindowStyle = ProcessWindowStyle.Normal
    11. .Verb = "runas"
    12. .UserName = "sUser"
    13. .Password = sc
    14. .Domain = "sDomain"
    15. End With
    16. Dim procExecuting = Process.Start(procStartInfo)
    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!
    Hey RodFromGermany.
    Vielen Dank für die Hilfe.
    Ich habe das jetzt eingebaut und vielfach getestet.
    Leider wirft mir VS eine Meldung:
    System.InvalidOperationException: "Damit es möglich ist, einen Prozess als Benutzer zu starten, muss die UseShellExecute-Eigenschaft für das Process-Objekt auf "false" festgelegt werden."

    Das Ändern auf FALSE bringt mich dann leider wieder dahin, dass die zu installierende Anwedung sagt, dass Administratorberechtigungen erforderlich sind.
    arg...
    so far...
    Wumpel


    ...manchmal ist es einfacher als man denkt...

    Wumpel schrieb:

    die zu installierende Anwedung
    Meinst Du die installierende Anwendung?
    Starte sie testweise mit Admin-Rechten aus dem Explorer.
    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!
    @Wumpel Dann gib doch Deiner Exe Admin-Rechte.
    Hinzufügen => Neues Element => Anwendungsmanifestdatei

    Quellcode

    1. <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    2. ==>
    3. <requestedExecutionLevel level="requireAdministrator" uiAccess="true" />
    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!
    Hallo @RodFromGermany.
    Vielen herzlichen Dank für deine unermüdliche Hilfe.

    Fehler Die Anforderungsausführungsebene "requireAdministrator" wird von ClickOnce nicht unterstützt.


    Von der Click-Once Lösung werden wir erst einmal nicht abweichen können, da sie in unserem Fall viele Vorteile bietet und die Nachteile überwiegen würden.
    Das heißt aber wohl auch, dass ich evtl keine Lösung für das ursprüngliche Problem bekommen kann.
    "Mit meiner Anwendung unter Angabe von Admin-Konto und Password eine andere Anwendung erfolgreich installieren zu können".

    Nachtrag:
    Ich verstehe nach wie vor nicht, warum ein "normaler Anwender" mittles "Ausführen als anderer Benutzer" die Instalaltion durchführen kann. Wenn ich diese Aktivität dann über meine Anwendung "durchreiche", mit identischen Werten (Benutzername und Passwort), dann klappt es zu 10% nicht. crazy
    so far...
    Wumpel


    ...manchmal ist es einfacher als man denkt...