reg und bat Datei als Administrator ausführen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von DTF.

    @haiflosse1 Führe das vb-Programm als Administrator 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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es geht um folgendes.

    Ich starte mein vb.net Programm automatisch beim Autostart wenn ein Benutzer den Computer startet.
    Dabei soll eine Registry Datei und bat Datei ausgeführt werden.

    Es handelt sich um folgende reg Datei:

    Quellcode

    1. Windows Registry Editor Version 5.00
    2. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
    3. "HideSCANetwork"=dword:00000001


    und folgende bat Datei:

    Quellcode

    1. taskkill /f /im explorer.exe
    2. start explorer.exe


    Der Benutzer hat aber keine Berechtigung dass er die registry Datei ausführen kann, daher suche ich eine Möglichkeit es als Administrator auszuführen.
    Wie kann ich das vb.net Programm automatisch im Autostart als Administrator starten?

    Danke
    Wenn ich die Anwendung immer als Administrator ausführen anhacke werde ich gefragt das Passwort vom Administrator einzugeben. Es soll aber keine Aufforderung kommen.

    Ich habe es mit psexec versucht.
    Wenn ich folgendes in einer normalen cmd (ohne Admin) ausführe:

    Quellcode

    1. c:\progra~2\pstools\psexec.exe \\desktop-bt6ae6p -u administrator -p pwd reg import c:\Users\administrator\downloads\reg_aus.reg

    oder

    Quellcode

    1. c:\progra~2\pstools\psexec.exe \\desktop-bt6ae6p -u administrator -p pwd c:\Users\administrator\downloads\aktualisieren.bat

    dann funktioniert alles ohne Probleme.

    Dies habe ich dann versucht auch in vb.net aufzurufen:

    Quellcode

    1. Dim process As Process = Process.Start("c:\progra~2\pstools\psexec.exe \\desktop-bt6ae6p -u administrator -p pwd reg import c:\Users\administrator\downloads\reg_aus.reg")
    2. process.WaitForExit()
    3. Dim process2 As Process = Process.Start("c:\progra~2\pstools\psexec.exe \\desktop-bt6ae6p -u administrator -p pwd c:\Users\administrator\downloads\aktualisieren.bat")
    4. process2.WaitForExit()


    Da bekomme ich dann folgende Meldungen:
    https://www.dropbox.com/s/xp29qhgizmihuqt/meldung.png?dl=0
    und
    https://www.dropbox.com/s/zdsewv3o7z243dt/meldung2.png?dl=0

    lg
    Danke für den Hinweis.
    Gibt es eine Aufgabenplaung auch zum Beenden bzw. herunterfahren da ich das Netzwerksymbol über die Registry wieder einschalten muss

    Quellcode

    1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
    2. "HideSCANetwork"=dword:00000000


    lg

    haiflosse1 schrieb:

    Gibt es eine Aufgabenplaung auch zum Beenden bzw. herunterfahren da ich das Netzwerksymbol über die Registry wieder einschalten muss


    Wenn du dir einfach mal den Taskplaner angeschaut hättest, dann hättest du das bereits selbst herausgefunden.(Siehe Anhang!)


    Wenn du eh schon eine Anwendung hast, warum denn eigendlich eine Bat und Reg Datei ausführen? Das kannst du in deinem Programm machen, ohne extra Dateien.
    Wenn es gestartet wird ausschalten, du kannst im Programm feststellen wann es beendet wird, kannst sogar den Grund erfahren 8o , möglicherweise kannst du dann noch den Registry Eintrag machen. Einfach mal probieren, einen Trigger der beim sutdown ausgelöst wird gibt es nicht. Bei "Trennung des Benutzerkontos" könnte es schon zu spät sein für den Reg-Eintrag.
    Bilder
    • Unbenannt.png

      13,35 kB, 472×281, 42 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Was ich hier fraglich finde, ist warum du unbedingt etwas tun möchtest, ohne dass der Nutzer das erfährt?
    Vor allem ohne Warnung in der Registry bei Windows rumpfuschen und dann den Explorer neustarten finde ich eine extreme Sache.

    In deinem Fall ist das sogar eine einfache GPO, die du über AD steuern könntest und mit gpupdate aktualiseren könntest.
    Anstatt hier selber irgendwas zu fuhrwerken, wäre es besser die Microsoft-Tools zu verwenden, die dann auch mit allen möglich unerwarteten Umständen umgehen können.

    Hier ein paar Links die dir weiterhelfen sollten:
    admx.help/?Category=Windows_10….TaskBar2::HideSCANetwork
    woshub.com/how-to-create-modif…-registry-keys-using-gpo/

    Merke: wenn du es über ein GPO machst, wird das sogar mitgeloggt und bei jedem Systemstart unabhängig vom Benutzer ausgeführt.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Danke für die Antworten und Ideen.

    Es geht um eine Prüfungsumgebung und da möchte ich beim Start das Netzwerksymbol ausblenden, damit es nicht verändert werden kann. Es handelt sich auch um weitere Einträge.
    Der Teilnehmer soll nichts bemerken.

    Ich werde mir den Taskplaner ansehen und soweit ich gesehen habe kann ich weitere Aktionen hinzufügen und werde da versuchen die Registry und bat Dateien ausführen.

    Da der Teilnehmer immer die Prüfung in Word druchführt und am Ende Word schließt führe ich da eine vb.net Anwendung aus wo die Prüfung zusätzlich zum Prüfer gespeichert wird. Dort ist angedacht auch in der vb.net Anwendung die Registry zum Anzeigen des Netzwerkicons wieder zu aktivieren, da danach der Computer herunterfährt.
    Alternativ kann ich es evtl. auch über vba lösen.

    Komisch ist nur, dass ich anscheinend keine Registry oder bat Datei direkt von einer VB.net Anwendung als Administrator ausführen kann?
    @haiflosse1 Mache ein Gast-Login, da kannst Du anzeigen lassen, was anzuzeigen ist.
    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!

    haiflosse1 schrieb:

    Es geht um eine Prüfungsumgebung und da möchte ich beim Start das Netzwerksymbol ausblenden, damit es nicht verändert werden kann. Es handelt sich auch um weitere Einträge.
    Der Teilnehmer soll nichts bemerken.


    Dann wirst du sicherlich mehrerer dieser Rechner haben, wo es dann noch besser wäre, mit GPOs zu arbeiten, mMn.
    Klatsch die Rechner alle in einer Domäne, die von einem kleinen DC verwaltet wird - dafür reicht ein ausgemusterter PC/Notebook.
    Lizenzen sind spottgünstig und die Einrichtung ebenfalls easy.

    Dann erstellst du bspw. ein Roaming-User und jeder PC kann diesen einen Nutzer verwenden und überall sind die gleichen Programme und Einstellungen.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)
    Danke für die weiteren Antworten.
    Das mit der Domäne geht leider nicht, da die Computer bereits in einer Domäne sind.
    D.h. wenn der Laptop nicht für die Prüfung verwendet wird, wird über den Router ein LAN Kabel angeschlossen und es ist möglich sich mit dem Domänenbenutzer anzumelden. Wenn man das LAN Kabel beim Router abschließt dann wird ein eigenes geschlossenes Netz ohne Domäne verwendet.
    Dazu gibt es einen lokalen Benutzer der für die Prüfung verwendet wird.

    Wie ist dies mit dem Gastkonto gemeint. Heitß dies dass ich bei einem Gastkonto das Netzwerk Symbol und das anschließen von externen USB Speicher deaktivieren (weiterer Reg-Eintrag in hklm) kann und bei den anderen Benutzern funktioniert alles wie gewohnt? Während der Prüfung soll es nämlich nicht möglich sein das Netzwerk zu ändern und einen externen Speicher anzuschließen.

    Ich habe mir den Taskplaner angesehen.
    Da kann ich nur als Administrator die Aufgabe erstellen und funktioniert auch aber nur als Administrator. Als Benutzer kann ich keine Aufgabe erstellen und somit kann ich die reg und bat Dateien nicht ausführen.

    Schade dass man reg und bat nicht mit vb.net starten kann.

    haiflosse1 schrieb:

    Schade dass man reg und bat nicht mit vb.net starten kann.


    Kann man schon, aber dann poppt die UAC auf, wenn aktiviert.

    VB.NET-Quellcode

    1. Dim process As New Process()
    2. process.StartInfo.FileName = "cmd.exe"
    3. process.StartInfo.Verb = "runas"
    4. process.StartInfo.UseShellExecute = True
    5. process.Start()


    Man auch aus der Aufgabenplanung heraus Sachen mit Adminrechten starten, ich kann zumindest User/Gruppe ändern, siehe Anhang.
    Bilder
    • Unbenannt.png

      23,12 kB, 516×503, 37 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Ich habe noch folgenden Code verwendet:

    Quellcode

    1. Dim process As New Process()
    2. process.StartInfo.FileName = "reg import c:\Users\administrator\downloads\reg_ein.reg"
    3. process.StartInfo.Verb = "runas"
    4. process.StartInfo.UseShellExecute = True
    5. process.Start()


    Da bekomme ich aber folgende Meldung:
    dropbox.com/s/joirqw1mlvwya5w/m.png?dl=0

    Kann mir jemand noch helfen wie ich dies lösen kann.

    Bezüglich der Aufgabenplanung habe ich alle möglichen Benutzer und Gruppen ausprobiert.

    Danke

    haiflosse1 schrieb:

    Kann mir jemand noch helfen wie ich dies lösen kann.


    VB.NET-Quellcode

    1. process.StartInfo.FileName = "c:\Users\administrator\downloads\reg_ein.reg"

    Sollte gehen, du kannst aber auch mit dem Programm selbst den Eintrag machen, auch den Explorer neu starten, habe ich schon erwähnt. Warum dann mit externen Dateien arbeiten?
    Registry Key erstellen?

    Das Programm braucht Adminrechte, um im Studio zu testen öffne das Studio mit AdminRechten!
    Erstellen/ändern, wie auch komplett löschen.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Set_HideSCANetwork_Key(0)
    3. Dim p() As Process = Process.GetProcessesByName("explorer")
    4. If p.Length > 0 Then
    5. p(0).Kill()
    6. 'der explorer starte bei mir automatisch neu
    7. 'sonst Process.Start("explorer")
    8. End If
    9. End Sub
    10. Public Sub Set_HideSCANetwork_Key(i As Integer)
    11. Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer", True)
    12. If Not key Is Nothing Then
    13. key.SetValue("HideSCANetwork", i, RegistryValueKind.DWord)
    14. End If
    15. End Sub
    16. Public Sub Delete_HideSCANetwork_Key()
    17. Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer", True)
    18. If Not key Is Nothing Then
    19. Dim o As Object = key.GetValue("HideSCANetwork")
    20. If Not o Is Nothing Then
    21. key.DeleteValue("HideSCANetwork")
    22. End If
    23. End If
    24. End Sub

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    Ohne Adminrechte keine Einträge in die Registry. So einfach ist das, und das ist auch gut so. Überleg mal die spielst ein Online-Spiel, es findet jemand einen Weg für eine RCE(RemoteCodeExecution) und zerschießt deine Registry. Das ist garnicht mal so unwahrscheinlich. Kurzlich hatte sogar Rockstar Games mit GTA V so eine Lücke. Und obwohl die Lücke öffentlich bekannt war, haben abertausende gespielt.
    reddit.com/r/Steam/comments/10…ng_gta_v_a_game_with_rce/

    Die Lösung mit weiteren User-Accounts, sehe ich als die goldene Lösung. UAC ausschalten geht auch, aber das wäre riskant. Man könnte auch die Laptops ausschlieslich für die Tests nehmen und passend einrichten. Laptops kosten nicht die Welt, hab kürzlich 10 alte(neuware) Lenovo Thinkpad 13 für 1800€ gekauft um sie in die Ukraine zu schicken(spende). Solche würden auch für die Tests reichen.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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