MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Visual Studio /.NET > Visual Studio .NET (alle Produkte: C#, VB.NET etc.)
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 15.05.2016, 21:44   #1
M Merlin
MOF Koryphäe
MOF Koryphäe
Standard VB - Exe mit Adminrechten - Codeteile mit normalen Rechten

Hallo zusammen,
ich muss in einem Programm einmal Befehle als Administrator und einmal mit normalen Rechten ausführen.

Geht das ?

Also ich starte das Programm als Administrator, und zwar wie folgt:
Ich setzte in der app.Manifest folgenden Eintrag:

Code:

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
Jetzt werden aber alle Befehle mit Adminrechten ausgeführt. Kann ich jetzt explizit einen Befehl wieder mit normalen Rechten ausführen?

Hat jemand eine Idee und vielleicht sogar ein Beispiel?


Schon mal vielen Dank für Eure Hilfe..

__________________

ach ja: Ich überarbeite manchmal meine Beiträge nachträglich - also ab und zu mal aktualisieren!

Ich finde es schade, wenn man auf einen Lösungsvorschlag keine Rückmeldung bekommt....
M Merlin ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2017, 14:50   #2
CruelDevice
MOF User
MOF User
Standard

Hi Merlin,

etwas spät die Antwort, aber dennoch hier ein möglicher Ansatz.
Idee ist das Programm mit den rechten des angemeldeten Nutzers zu starten, dann den Kontext zu einem anderen Benutzer mit Adminrechten wechseln, anschließend zurück zum Kontext des angemeldeten Benutzers.

Code:

using System;
using System.Threading;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;
using Microsoft.Win32.SafeHandles;
using System.Runtime.ConstrainedExecution;
using System.Security;

namespace RestartNetOpService
{
    class Program
    {
        [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
            int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public extern static bool CloseHandle(IntPtr handle);

        private const string userName = "testAdminuser";
        private const string domainName = "TestDomainABC";
        private const string userPassword = "testpasswort";
        
        static void Main(string[] args)
        {
            SafeTokenHandle safeTokenHandle;
        
            try
            {
                const int LOGON32_PROVIDER_DEFAULT = 0;
                //This parameter causes LogonUser to create a primary token. 
                const int LOGON32_LOGON_INTERACTIVE = 2;

                // Call LogonUser to obtain a handle to an access token. 
                bool returnValue = LogonUser(userName, domainName, userPassword,
                    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                    out safeTokenHandle);
                if (false == returnValue)
                {
                    int ret = Marshal.GetLastWin32Error();
                    Console.WriteLine("LogonUser failed with error code : {0}", ret);
                    throw new System.ComponentModel.Win32Exception(ret);
                }
                using (safeTokenHandle)
                {
                    using (WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
                    {
                        using (WindowsImpersonationContext impersonatedUser = newId.Impersonate())
                        {
                            Console.WriteLine("After switching context: " + WindowsIdentity.GetCurrent().Name);
                            // Aufgaben als Admin hier                           
                        }
                    }
                    // Releasing the context object stops the impersonation 
                    // Check the identity.
                    Console.WriteLine("After closing the context: " + WindowsIdentity.GetCurrent().Name);
                }                
            }
            catch (Exception ex)
            {
                //Fehlerbehandlung hier
            }  
            // Ab hier wieder die Rechte das angemeldeten Users
        }
    }
    public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid
    {
        private SafeTokenHandle()
            : base(true)
        {
        }

        [DllImport("kernel32.dll")]
        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        [SuppressUnmanagedCodeSecurity]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool CloseHandle(IntPtr handle);

        protected override bool ReleaseHandle()
        {
            return CloseHandle(handle);
        }
    }
}
Hoffe das hilft etwas weiter.

Viele Grüße,
Michael

__________________

Feedback wäre nett

Murphy's law:
If anything can go wrong, it will. If anything just cannot go wrong, it will anyway.
CruelDevice ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.