Hallo zusammen,
ich habe da mal eine Frage an die erfahreneren Programmierer. Ich habe ein kleines Tools geschrieben das die tägliche Arbeit vereinfachen und erleichtern wird. Allerdings habe ich ein Problem bei dem ich nicht weiterkomme. Offensichtlich habe ich hier einen Fehler drin oder vielleicht sogar den falschen Ansatz gewählt. Es geht bei dem Problem im Grunde darum, dass ich 2 Prozesse als ein andere User ausführen muss. Hierbei bricht das Programm aber mit der Fehlermeldung "Der Vorgang wurde durch den Benutzer abgebrochen" wieder ab. Es ist doch möglich cmd.exe als ein anderer Benutzer auszuführen?!
Ich hoffe es kann mir jemand weiterhelfen und mir erklären wo mein Fehler liegt. So lange ich etwas dazulernen kann, ist es auch nicht so schlimm wenn nicht alles auf Anhieb funktioniert ;).
Schonmal vielen Dank für eure Bemühungen.
*****EDIT*****
Ich denke es hat sich gerade erledigt. Das kommt davon wenn man irgendwann einfach Dinge übersieht.
ich habe da mal eine Frage an die erfahreneren Programmierer. Ich habe ein kleines Tools geschrieben das die tägliche Arbeit vereinfachen und erleichtern wird. Allerdings habe ich ein Problem bei dem ich nicht weiterkomme. Offensichtlich habe ich hier einen Fehler drin oder vielleicht sogar den falschen Ansatz gewählt. Es geht bei dem Problem im Grunde darum, dass ich 2 Prozesse als ein andere User ausführen muss. Hierbei bricht das Programm aber mit der Fehlermeldung "Der Vorgang wurde durch den Benutzer abgebrochen" wieder ab. Es ist doch möglich cmd.exe als ein anderer Benutzer auszuführen?!
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Imports System.Security.Principal
- Module Impersonate
- Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal un As String, ByVal domain As String, ByVal pw As String, ByVal LogonType As Integer, ByVal LogonProvider As Integer, ByRef Token As IntPtr) As Boolean
- Public Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As Boolean
- Public Sub ImpersonateAction()
- Dim tokenHandle As New IntPtr(0)
- Try
- If LogonUser("Username", "Domain", "Passwort", 2, 0, tokenHandle) Then
- Dim newId As New WindowsIdentity(tokenHandle)
- Using impersonatedUser As WindowsImpersonationContext = newId.Impersonate()
- 'Aktion als anderer Benutzer ausführen
- Process.Start("cmd.exe", ("/c mkdir c:\Ordnerpfad\NeuerOrdner"))
- Process.Start("cmd.exe", String.Concat(New String() {"/c robocopy ", Ursprung, " ", Ziel, " /mir /secfix /sec"}))
- End Using
- CloseHandle(tokenHandle)
- Else
- MsgBox("Anmeldung fehlgeschlagen")
- End If
- Catch ex As Exception
- MsgBox("Ein Fehler ist aufgetreten. Fehlerbeschreibung: " & vbCrLf & ex.Message)
- End Try
- End Sub
- End Module
Ich hoffe es kann mir jemand weiterhelfen und mir erklären wo mein Fehler liegt. So lange ich etwas dazulernen kann, ist es auch nicht so schlimm wenn nicht alles auf Anhieb funktioniert ;).
Schonmal vielen Dank für eure Bemühungen.
*****EDIT*****
Ich denke es hat sich gerade erledigt. Das kommt davon wenn man irgendwann einfach Dinge übersieht.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „galnar“ ()