Windows Forms-App (Net Framework) CMD Befehl als Admin

  • VB.NET
  • .NET 4.5

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von wolfi_bayern.

    Windows Forms-App (Net Framework) CMD Befehl als Admin

    Neu

    Hallo liebe Leute im Forum, ich stehe vor vor einem Rätsel. Ich möchte einen kleines Tool erstellen mit dem ich den Schreibschutz unter Windows 10 IOT einschalten bzw. ausschalten kann. Leider habe ich nich wenig Ahnung von VB.

    Ich schaffe es irgendwie nicht das der der CMD Befehl als Admin ausgeführt wird. Das geht ja glaube eigentlich mit runas, nur leider scheint es nicht zu funktionieren. Ich habe den Code unten mal ohne runas dazu geschrieben.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If TextBox1.Text = "Master" Then
    MsgBox("Schreibschutz wird aktiviert. System startet neu")
    Dim p As New Process()
    p.StartInfo = New ProcessStartInfo("cmd.exe c/uwfmgr filter enable") With {
    .CreateNoWindow = True,
    .WindowStyle = ProcessWindowStyle.Hidden
    }
    p.Start()

    End If
    End Sub


    Kann mir bitte jemand helfen, wie dieses Problem zu lösen ist?

    LG Andi

    Neu

    Willkommen im Forum. :thumbup:

    Anditaker schrieb:

    Das geht ja glaube eigentlich mit runas
    So isses.
    Wie sieht denn Dein Code mit runas aus?
    Soll Dein Programm selbst mit Admin-Rechten starten? => Mini-Tutorial: Administratorrechte und VB.NET
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Neu

    Danke für deine Antwort.
    Mit runas sieht das jetzt so aus.
    Das Programm wird ausßerdem schon als Admin gestartet.


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If TextBox1.Text = "Master" Then
    MsgBox("Schreibschutz wird aktiviert. System startet neu")
    Dim p As New Process()
    p.StartInfo = New ProcessStartInfo("cmd.exe c/uwfmgr filter enable") With {
    .CreateNoWindow = True,
    .WindowStyle = ProcessWindowStyle.Hidden
    }
    p.StartInfo.Verb = "runas"

    p.Start()

    End If
    End Sub

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

    Neu

    @Anditaker runas funktioniert bei mir sofort.
    Vielleicht packst Du mal Deine Argumente in die Property Arguments:

    VB.NET-Quellcode

    1. Dim p As New Process()
    2. p.StartInfo.FileName = "cmd.exe"
    3. p.StartInfo.Arguments = "c/uwfmgr filter enable"
    4. p.StartInfo.CreateNoWindow = True
    5. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    6. p.StartInfo.Verb = "runas"
    7. p.Start()
    Warum startest Du das Programm hidden :?:
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Neu

    danke für die schnelle Antwort. Leider funktioniert der code auch nicht. Die CMD soll im HIntergrund starten und nur diesen einen kurzen befehl ausführen.
    Allerdings habe ich das gefühl, dass VB gar nicht die Arguments überträgt. Also dass die CMD zwar als Admin geöffnet wird, aber sie den Befehl nicht ausführt.

    Neu

    Ich vermute das deine Parameter unfug sind, was soll das c/ am Anfang bewirken?
    Nebenbei erwähnt, uwfmgr.exe ist eine Binary, die kannst du direkt ausführen.

    VB.NET-Quellcode

    1. Dim p As New Process()
    2. p.StartInfo.FileName = "uwfmgr.exe"
    3. p.StartInfo.Arguments = "filter enable"
    4. p.StartInfo.CreateNoWindow = True
    5. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    6. p.StartInfo.Verb = "runas"
    7. p.Start()

    Neu

    Anditaker schrieb:

    Allerdings habe ich das gefühl, dass VB gar nicht die Arguments überträgt.
    Das liegt nicht an VB, sondern an cmd.
    Teste das mit Notepad.exe und c:\Temp\DEINE_DATEI.txt.
    Wenn Du einen String in die Console schreiben willst, musst Du das mit .RedirectStandardInput machen.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Neu

    Ich hab die Erfahrung gemacht, dass gerade wenn man die Admin-Rechte will sowas dazugehört.

    VB.NET-Quellcode

    1. net user Administrator /active:yes
    2. ....
    3. net user Administrator /active:no


    EDIT: Sorry, bitte nicht beachten. Geht wahrscheinlich nicht für die neueren Technologien.


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Neu

    Dann gibt halt den vollen Pfad an (ggf. auch den WorkingDirectory), woher soll ich wissen, das deine Umgebungsvariablen nicht gesetzt sind?

    Neu

    ich habe jetzt eine batch datei gschrieben, die das mit dem Schreibschutz macht (Also den Befehl ausführt). Allerdings weiß ich nicht wie ich die als Admin starte. Das mit dem "runas" funktioniert nicht. Ich habe es auch schon ausprobiert, dass man bei starten des Programmes Admin Rechte braucht. Vielleicht könnt ihr mir da helfen.

    @exc-jdbi was meinst du damit?

    Neu

    Hallo Leute!
    Ich hab oben was von Iot gelesen... Somit kann der gezeigte Code auf gar keinen Fall funktionieren.
    Bei iot gibt's keinen Schreibschutz der ein oder ausgeschaltet werden könnte.
    Schon mal hier reingeschaut: windowsondevices.com.?

    Grüße
    Der Beitrag wurde aus 100% wiederverwendbaren Elektronen erstellt!

    Neu

    Anditaker schrieb:

    Das mit dem "runas" funktioniert nicht.
    Mit welchem Code?
    Mein Code in Post #4 funktioniert, allerdings ohne das Argument. Probiere ihn exakt so aus!
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Neu

    Um die Aussage von @wolfi_bayern zu verifizieren, müsste man doch einfach in der Shell den Befehl uwfmgr filter enable eingeben und prüfen, ob es den gewünschten Effekt erzielt.
    Damit wären VB-Probleme aussen vor.

    @RodFromGermany hat natürlich recht, dass der Code ohne Parameter funktioniert.
    Aber die Parameter sind schrott.
    Darauf hatte @slice in Post #6 schon hingewiesen.
    Richtig müsste es heißen /c uwfmgr filter enable.
    Das /c ist nämlich ein Parameter für CMD (close after execution), der Rest ist der auszuführende Befehl, den CMD ausführen soll.

    Falls der oben vorgeschlagene Shell-Versuch erfolgreich ist, wäre der Code aus Post #6 die eleganteste Variante.
    Falls nicht, muss wohl nochmals auf Post #12 verwiesen werden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Hallo!

    Beschreibung zum Befehl ist hier: docs.microsoft.com/en-us/windo…rise/unified-write-filter

    Das ganze bezieht sich aber nicht auf Windows iot. Hier werden ganz andere Mechanismen verwendet. Siehe hier für den Umgang mit Dateien bei uwp: docs.microsoft.com/de-de/windows/uwp/files/index

    Grüße
    Der Beitrag wurde aus 100% wiederverwendbaren Elektronen erstellt!

    Neu

    Danke für die vielen Antworten. Das Windows, auf dem ich das Programm immer teste, hat definitiv eine Schreibschutz funktion. Die kann ich über die cmd auch aktivieren.
    Den Post #6 habe ich schon ohne erfolg ausprobiert.

    Dim p As New Process()
    p.StartInfo.FileName = "enable.bat"
    p.StartInfo.CreateNoWindow = True
    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    p.StartInfo.Verb = "runas"
    p.Start()

    dieser Code müsste doch so auch funktioniern. Hier startet er die Batch Datei aber auch nicht als admin.
    Wenn ich die enable.bat von Hand als Admin starte, ist der Schreibschutz dann auch drin.

    Grüße

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

    Neu

    Ja das habe ich auch schon gemacht. Ich habe jetzt nochmal diesen Code ausprobiert:

    Dim psi As New ProcessStartInfo()
    psi.FileName = ".\\enable.bat"
    psi.Verb = "runas"
    Process.Start(psi)

    Wenn das Programm jetzt diesen Code ausführt fragt er mich nach den Admin Rechten. Dann startet er die Datei (enable.bat) und gibt die Fehlermeldung aus, dass es den Befehl uwfmgr nicht gibt. Wenn ich aber wie schon gesagt die enable.bat selbst starte funktioniert sie.

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