Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

C Sharp - Prozess als Administrator laufen lassen

Mitglied: Cubic83

Cubic83 (Level 2) - Jetzt verbinden

21.10.2011, aktualisiert 14:02 Uhr, 2923 Aufrufe, 2 Kommentare

Hallo,

ich starte ein Programm als User und möchte gerne ein weiteres Programm als Administrator starten.

Versuch 1:

01.

02.
Process proc = new Process();
03.
proc.StartInfo.FileName = @"C:\myprogram.exe";
04.
proc.StartInfo.UseShellExecute = false;
05.
proc.StartInfo.Arguments = "";
06.
proc.StartInfo.UserName = "Administrator";
07.
System.Security.SecureString secpass = new System.Security.SecureString();
08.

09.
secpass.AppendChar('m');
10.
secpass.AppendChar('y');
11.
secpass.AppendChar('p');
12.
secpass.AppendChar('a');
13.
secpass.AppendChar('s');
14.
secpass.AppendChar('s');
15.

16.
proc.StartInfo.Password = secpass;
17.
proc.StartInfo.Domain = Environment.MachineName;
18.
proc.StartInfo.WorkingDirectory = System.Environment.CurrentDirectory;
19.

20.
proc.Start();         
21.
Exception: Access is denied

Versuch 2

01.

02.
public void RunProgram()
03.
{
04.

05.
   ImpersonateUser("adminstrator", "mypass", System.Environement.MachineName);
06.
   WindowsIdentity identity = WindowsIdentity.GetCurrent();
07.
   WindowsPrincipal principal = new WindowsPrincipal(identity);
08.

09.

10.
    if (principal.IsInRole(WindowsBuiltInRole.Administrator))
11.
    {
12.
        MessageBox.Show("Running as Administrator");
13.
        Process proc = new Process();
14.
        proc.StartInfo.FileName = @"C:\myprogram.exe";
15.
        proc.StartInfo.Arguments = "";
16.
        proc.StartInfo.WorkingDirectory = System.Environment.CurrentDirectory;
17.
        proc.Start();         
18.
     }
19.

20.
}
21.

22.
    public enum SECURITY_IMPERSONATION_LEVEL : int
23.
    {
24.
        SecurityAnonymous = 0,
25.
        SecurityIdentification = 1,
26.
        SecurityImpersonation = 2,
27.
        SecurityDelegation = 3
28.
    }
29.

30.

31.
        [DllImport("advapi32.dll", SetLastError = true)]
32.
        public static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
33.

34.
        [DllImport("kernel32")]
35.
        private static extern int CloseHandle(IntPtr handle);
36.

37.
        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
38.
        public extern static bool DuplicateToken(IntPtr ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);
39.

40.
        static public void ImpersonateUser(string sUsername, string sDomain, string sPassword)
41.
        {
42.
            IntPtr pExistingTokenHandle = new IntPtr(0);
43.
            IntPtr pDuplicateTokenHandle = new IntPtr(0);
44.
            pExistingTokenHandle = IntPtr.Zero;
45.
            pDuplicateTokenHandle = IntPtr.Zero;
46.

47.
            try
48.
            {
49.
                const int LOGON32_PROVIDER_DEFAULT = 0;
50.
                const int LOGON32_LOGON_INTERACTIVE = 2;
51.
                bool bImpersonated = LogonUser(sUsername, sDomain, sPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,ref pExistingTokenHandle);
52.

53.
                
54.
                if (false == bImpersonated)
55.
                {
56.
                    int nErrorCode = Marshal.GetLastWin32Error();
57.
                }
58.
                
59.
                bool bRetVal = DuplicateToken(pExistingTokenHandle, (int)SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation, ref pDuplicateTokenHandle);
60.
                
61.
                if (false == bRetVal)
62.
                {
63.
                    int nErrorCode = Marshal.GetLastWin32Error();
64.
                    CloseHandle(pExistingTokenHandle);
65.
                }
66.
                else
67.
                {
68.
                    WindowsIdentity newId = new WindowsIdentity(pDuplicateTokenHandle);
69.
                    WindowsImpersonationContext impersonatedUser = newId.Impersonate();
70.
                }
71.
            }
72.
            catch (Exception ex)
73.
            {
74.
                throw ex;
75.
            }
76.
        }
77.
Funktionniert zwar - der Prozess läuft aber im Userkontext.


Kann mir bitte jemand sagen was ich falsch mache oder wie ich es richtig machen muss? Google ist voll von Tipps - es läuft aber auf diese beiden Varianten hinaus. Das Programm läuft unter Windows XP mit .NET 3.5 installiert.

Vielen Dank und ein schönes Wochenende
Mitglied: vorstieg
21.10.2011 um 15:38 Uhr
Hallo, folgender Code funktioniert bei mir einwandfrei:

Process prog = new Process();
prog.StartInfo.UserName=@"Administrator";
System.Security.SecureString secpass = new System.Security.SecureString();
secpass.AppendChar('p');
secpass.AppendChar('a');
secpass.AppendChar('s');
secpass.AppendChar('s');
prog.StartInfo.Password = secpass;
prog.StartInfo.UseShellExecute = false;
prog.StartInfo.FileName = @"C:\\folder\test.exe";
prog.Start();


Bei welcher Zeile kommt denn die Fehlermeldung bei Version 1?

mfg Flo
Bitte warten ..
Mitglied: Cubic83
21.10.2011 um 18:10 Uhr
Dieser Code klappt aber leider nicht.

Der Fehler wird bei proc.Start() geworfen.
Bitte warten ..
Ähnliche Inhalte
Visual Studio
C Sharp - Runden
gelöst Frage von Cubic83Visual Studio5 Kommentare

Guten Morgen, ich habe ein Problem unter C# bei dem ich den Preis eines Artikels ohne Mehrwertsteuer berechnen muss. ...

C und C++
C-sharp Form buggt
gelöst Frage von YanmaiC und C++2 Kommentare

Hallo ihr Administratoren. Ich habe ein kleines Problem. Unszwar möchte ich eine Ordner von C# zu einem PHP Script ...

C und C++
C Sharp XAML Universal
Frage von DippsC und C++3 Kommentare

Hallo ich versuche gerade mit C#2015 ein Projekt Universal XAML zu erstellen um auf einem Raberry PI 2 mit ...

C und C++
C-sharp SearchPattern (Regex)
Frage von YanmaiC und C++6 Kommentare

Hallo ihr Administratoren, ich verwende ein AUtocpmpletemenu Plugin. Dort habe ich Snippets, die dann sozusagen completed werden. Beim erstellen ...

Neue Wissensbeiträge
Internet

Kommentar: Bundesregierung erwägt Ausschluss von Huawei im 5G-Netz - Unsere Presse wird immer sensationsgieriger

Information von Frank vor 2 StundenInternet1 Kommentar

Hier mal wieder ein schönes Beispiel für fehlgeleiteten Journalismus und Politik zugleich. Da werden aus Gerüchten plötzlich Fakten, da ...

Windows 10

Netzwerk-Bug in allen Windows 10-Versionen durch Januar 2019-Updates

Information von kgborn vor 6 StundenWindows 101 Kommentar

Nur ein kurzer Hinweis für Admins, die Windows 10-Clients im Portfolio haben. Mit den Updates vom 8. Januar 2019 ...

Windows 10

Windows 10 V1809: Rollout ist gestartet - kommt per Windows Update

Information von kgborn vor 1 TagWindows 102 Kommentare

Eine kurze Information für die Admins, die Windows 10 im Programm haben. Microsoft hat die letzte Baustelle (die Inkompatibilität ...

Sicherheit

Heise Beitrag Passwort-Sammlung mit 773 Millionen Online-Konten im Netz aufgetaucht

Information von Penny.Cilin vor 1 TagSicherheit6 Kommentare

Auf Heise Online ist folgender Beitrag veröffentlicht worden: Heise Beitrag passwörter geleakt Ich bin mir jetzt nicht ganz sicher, ...

Heiß diskutierte Inhalte
Windows Server
Uhren gehen immer wieder falsch
Frage von killtecWindows Server23 Kommentare

Hallo, ich habe folgende Konstellation: 1. Physischer DC Div. Virtuelle DC's auf Hyper-V Servern Die Hyper-V-Server, der Physische DC ...

Switche und Hubs
Medienkonverter mit 12 oder 24 Ports gesucht
Frage von wmuellerSwitche und Hubs23 Kommentare

Guten Morgen, ich bin auf der Suche nach einem größeren Medienkonverter, der "stumpf" 1:1 die Ports auf über ein ...

Batch & Shell
Mit findstr batch doppelte zeilen einer txt löschen
Frage von Burningx2Batch & Shell21 Kommentare

Hi Vor einer weile habe ich im netzt einen windows shell befehl gefunden mit welchem man über die konsole ...

Windows Server
Client in die Domäne einbinden - Allgemeine Frage dazu
gelöst Frage von RalphTWindows Server19 Kommentare

Moin, ich habe 2 DCs in einer Hauptstelle und 2 DCs in einer Nebenstelle. Ich bringe in der Hauptstelle ...