Datei kopieren/Ordner erstellen als anderer Benutzer

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von siycah.

    Datei kopieren/Ordner erstellen als anderer Benutzer

    Hallo!

    Ich habe mal ein paar Fragen zum kopieren/ausführen als anderer Benutzer.
    Kurz um was es geht:
    Ich habe eine bat Datei, die würde ich gerne umschreiben zu VB, oder auch C#. Steht noch nicht fest.
    Das Script ansich wird als System ausgeführt, allerdings müssen manche Befehle darin als den eingeloggten User ausgeführt werden, wie z.B.
    1. Starte den eigentlichen Installer vom Programm als User
    2. Erstelle Ordner im Benutzerverzeichnis
    3. Kopiere Dateien aus einem Ordner in die zuvor erstellten Ordner
    4. Kreire einen Symlink als System

    Hier ist das Script:

    Quellcode

    1. @echo off
    2. if not exist "C:\DIR" mkdir C:\DIR ## should be run as logged in user
    3. if not exist "%userprofile%\.config\DIR" mkdir %userprofile%\.config\DIR ## should be run as logged in user
    4. START /B call "Programm.exe" ## should be run as logged in user
    5. START /B /WAIT xcopy "file.txt" "%userprofile%\.config\DIR\" ## should be run as logged in user
    6. START /B /WAIT xcopy "file2.txt" "C:\DIR\" ## should be run as logged in user
    7. START /B /WAIT mklink "%userprofile%\Desktop\Link.lnk" "C:\DIR\file.txt" ## should be run as system


    Meine Frage ist nicht wie ich Dateien kopiere usw., sondern ob und wie das geht die einzelnen Sachen als jemand anderes auszuführen, in dem Fall als den eingeloggten User.
    Oder kann man das mit VB.NET und/oder C# "umgehen"?

    Wenn ich danach suche, finde ich nur Anleitungen wie man die kompilierte Exe als jemand anderes ausführt, aber nicht das wonach ich eigentlich suche.

    Kann mir jemand einen Tipp oder Stichwort geben?

    Vielen Dank!
    Mit RUNAS
    learn.microsoft.com/en-us/prev…nd-2012/cc771525(v=ws.11)

    kannste probieren eine Batch zu starten, oder auch eine EXE die das kopieren macht.

    Ich täte wenn ich das bräuchte tief in der WinAPI buddeln, bei NTCreateFile kann man ja auch Besitzerinformationen, die der Datei zugeordnet sind schreiben. Oder noch tiefer auf Treiberebene ZwCreateFile

    Microsoft ZwCreateFile schrieb:


    If the call to this function occurs in user mode, you should use the name "NtCreateFile" instead of "ZwCreateFile".


    Evtl. mal das zum suchen nutzen in kombination mit non user mode oder so.

    Ich hab mich zwar oberflächlich mit den tieferen API-Layern beschäftigt, wegen chronischen Zeitmangel aber bisher noch nicht detailiert, aber ich kann mir vorstellen, das es mit den tieferen API-Layern machbar ist.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    @DTF Der Link von dir ist tot.

    @Parmaster
    Schau dir mal diesen Link bei StackOverflow an: stackoverflow.com/questions/14…rocess-as-some-other-user

    runas scheint auch nicht mehr mit Windows 10 zu funktionieren (zumindest habe ich bei meiner schnellen Google Suche nichts zum Thema Win10/11 gefunden).
    Der o.g. Link ist zwar für C++, aber es ist nicht sonderlich schwer, so eine Funktion in C++ zu schreiben und in einem C# (oder VB) Programm zu verwenden.
    Siehe dazu learn.microsoft.com/de-de/dotn…eropservices?view=net-8.0
    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 :)

    Parmaster schrieb:

    meiner Meinung nach

    Richtig, das ist der springende Punkt.

    Das ist ganz bewusst nicht "einfach" implementiert, weil das ein Sicherheitsrisiko darstellen kann.
    Als Windows noch ein junges Küken war, noch unsicherer als es eh schon ist, war das alles gar kein Problem, weil jedes Programm mit höchsten Rechten* ausgeführt wurde.
    Heutzutage ist das zum Glück anders.

    * Soweit es die CPU zuließ, weil schon mit dem 286 Protected Mode eingeführt wurde.
    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 :)

    siycah schrieb:


    runas scheint auch nicht mehr mit Windows 10 zu funktionieren (zumindest habe ich bei meiner schnellen Google Suche nichts zum Thema Win10/11 gefunden).


    Ja gibt es noch, einfach mal schwarzes Fenster aufmachen und "runas" ohne ""abfeuern.

    @Parmaster
    Ich kann Dir eine Kombination as dem konstenlosen Tool "Runs as" von Sordum und die process Klasse empfehlen, damit gelingt dein Vorhaben

    sordum.org/downloads/?runastool

    VB.NET-Quellcode

    1. Using myProcess As New Process()
    2. myProcess.StartInfo.UseShellExecute = False
    3. myProcess.StartInfo.FileName = "PfadZuDeinerExeDieDuMitDemToolObenErstelltHast"
    4. myProcess.StartInfo.CreateNoWindow = True
    5. myProcess.Start()
    6. End Using

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ATXMega256@32MHz“ ()

    ATXMega256@32MHz schrieb:

    Ja gibt es noch, einfach mal schwarzes Fenster aufmachen und "runas" ohne ""abfeuern.


    Ich habe nie gesagt, dass es das nimmer gibt. Lediglich, dass Microsoft das nicht mehr für Win10+ dokumentiert hat. Lesen.
    Wie man einen Befehl auf der Konsole absetzt ist mir ebenfalls bewusst. Aber danke ;)
    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 :)