System.Diagnostics.Process

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von BigBen2003.

    System.Diagnostics.Process

    Hallo,

    es wird eine Mehtode gesucht, mit der ein Process unter Verwendung eines anderen Users gestartet werde kann.

    Hierzur kommt folgender VB.Net Code zum Einsatz:

    VB.NET-Quellcode

    1. Private Function RunProcess(userName As String, securePass As SecureString, domain As String, cmd As String) As Boolean
    2. Dim myPath = System.IO.Path.GetFullPath(FileIO.FileSystem.CurrentDirectory)
    3. Dim p As New Process
    4. p.StartInfo.UseShellExecute = false
    5. p.StartInfo.FileName = cmd
    6. p.StartInfo.UserName = userName
    7. p.StartInfo.Password = securePass
    8. p.StartInfo.Domain = domain
    9. p.StartInfo.Arguments = ""
    10. p.StartInfo.WorkingDirectory = myPath
    11. Return p.Start()
    12. End Function
    13. Public Shared Function ToSecureString(value As String) As System.Security.SecureString
    14. Dim myOut As New System.Security.SecureString
    15. For Each mychar As Char In value
    16. myOut.AppendChar(mychar)
    17. Next
    18. Return myOut
    19. End Function


    Die Funktion wird wie folgt aufgerufen:

    RunProcess("userA", ToSecureString("Password"), ".", "C:\Windows\notepad.exe")

    Beim Ausführen wird immer eine Win32Exception mit der Fehlermeldung "Der Verzeichnisname ist ungültig" geworfen.

    Im Debugging-Fenster kann man sehen, dass der Parameter "WorkingPath" auf ein gültiges Verzeichnis zeigt.

    Kann jemand verraten, welches Verzeichnis hier gemeint sein könnte? ?(

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

    BigBen2003 schrieb:

    Beim Ausführen wird immer eine Win32Exception mit der Fehlermeldung "Der Verzeichnisname ist ungültig" geworfen.

    Im Debugging-Fenster kann man sehen, dass der Parameter "WorkingPath" auf ein gültiges Verzeichnis zeigt.
    Hihi - solche Fragen kenne ich.
    In 99% der Fälle stellt sich am Ende heraus, dass der Verzeichnisname doch ungültig war.

    Die Verwirrung kam meist daher, dass "unsichtbare Zeichen" (Spaces, Tabs, Returns, NullChars) im String enthalten waren.
    "unsichtbar" bedeutet, dass sie im Debugger kaum, oder nur indirekt erkennbar sind (etwa daran, dass bei eim String das abschliessende " fehlt).
    @ErfinderDesRades

    Seltsam ist, dass ich seinen Code C&P habe, d.h auch den Funktionsaufruf RunProcess("userA", ToSecureString("Password"), ".", "C:\Windows\notepad.exe"). Aber du hast schon Recht, wenn VB sagt, dass das Verzeichnis ungültig ist, dann isses das auch.

    Hallo Pascalony,

    zwischenzeitlich habe ich festgestellt, dass der Fehler nur dann auftritt, wenn ein anderer Benutzer angegeben wurde, als gerade angemeldet ist.

    Pascalony schrieb:

    Zeig mal dein Debugging-Fenster her.


    Was meinst Du mit dem Debuggingfenster? In der Direktausgabe ist nur die Win32Exception

    In der Exception stehen folgende Details:
    Data: {System.Collections.ListDictionaryInternal}
    ErrorCode: -2147467259
    HResult: -2147467259
    HelpLink: Nothing
    InnerException: Nothing
    Message: "Der Verzeichnisname ist ungültig"
    NativeErrorCode: 267
    Source: "System"
    StackTrace: " bei System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)" & vbCrLf & " bei System.Diagnostics.Process.Start()" & vbCrLf & " bei RunningAs.Module1.RunProcess(String userName, SecureString securePass, String domain, String cmd) in C:\Users\User1\Documents\Visual Studio 2015\Projects\RunningAs\RunningAs\Module1.vb:Zeile 24."
    TargetSite: {Boolean StartWithCreateProcess(System.Diagnostics.ProcessStartInfo)}

    BigBen2003 schrieb:

    es wurde lediglich im Ganzen VB-Code ein Verzeichnis angegeben: "C:\Windows\notepad.exe"

    "C:\Windows\" ohne "notepad.exe" wäre ein Verzeichnis...

    BigBen2003 schrieb:

    Weitere Pfade wurde nicht angegeben, wie man auch im oben geposteten Code erkennen kann.

    Im oben gezeigten Code steht auch myPath = System.IO.Path.GetFullPath(FileIO.FileSystem.CurrentDirectory).

    In welcher Zeile tritt der Fehler denn auf und welchen Inhalt hat myPath?
    Hallo,

    der Fehler tritt beim Befehl ...
    Return p.Start()
    ... auf.
    myPath enthält den Pfad zur Debugging-Version des ausführender Programms.

    Da fällt mir ein, dass der Pfad im Persönliche Profil des aktuellen Users liegt. Aber der andere Testuser hat Admin-Berechtigungen und hat somit Zugriff auf alle Verzeichnisse.

    Lösung:
    Die Ursache liegt am "Aktuellen Pfad", auf dem der Testuser entgegen meiner Annahme keine Zugriffsbrechtigungen hat.

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