1

I use Visual Studio 2013, Windows 8.1.

I try get Environment.SpecialFolder values from Impersonate user, but I get always empty string value.

Any suggestions?.

My test code:

    [TestMethod]
    public void Environment_Folders_is_ok()
    {
        Console.WriteLine("CURRENT USER " + Environment.UserName);
        GlobalVariables.MyDocumentsPath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        Console.WriteLine(GlobalVariables.MyDocumentsPath);

        var p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
        Console.WriteLine(p1);
        p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        Console.WriteLine(p1);
        p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        Console.WriteLine(p1);
        p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
        Console.WriteLine(p1);

        var user = new Utils().DecryptValue(ConfigurationManager.AppSettings["User"]);
        var password = new Utils().DecryptValue(ConfigurationManager.AppSettings["Password"]);
        var domain = new Utils().DecryptValue(ConfigurationManager.AppSettings["Domain"]);

        GlobalVariables.Impersonate = true;

        using (new Impersonator(user, domain, password))
        {
            Console.WriteLine("IMPERSONATE with " +  user);
            p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            Console.WriteLine(p1);
            p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
            Console.WriteLine(p1);
            p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            Console.WriteLine(p1);
            p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            Console.WriteLine(p1);

       }

    }

Output:

CURRENT USER MyUser

C:\Users\MyUser\Documents
C:\Users\MyUser
C:\Users\MyUser\Desktop
C:\Users\MyUser\Desktop

IMPERSONATE with user2

Update:

As well as, I use FolderBrowserDialog and method ShowDialog and I get error

Unable to retrieve the root folder

when I use impersonation user

            try
            {
                Console.WriteLine("FolderBrowserDialog. IMPERSONATE WITH " + user);
                using (var fbd = new FolderBrowserDialog())
                {
                    Console.WriteLine(fbd.RootFolder);

                    p1 = System.Environment.GetFolderPath(fbd.RootFolder);
                    Console.WriteLine(p1);

                    DialogResult result = fbd.ShowDialog();
                }
            }
            catch (System.InvalidOperationException ex)
            {
                Assert.AreEqual("Unable to retrieve the root folder.", ex.Message, "No se esperaba " + ex.Message);
            }

Output:

FolderBrowserDialog. IMPERSONATE with user2
Desktop

Kiquenet
  • 14,494
  • 35
  • 148
  • 243

1 Answers1

0

I use LOGON32_LOGON_NEW_CREDENTIALS (LogonType.LOGON32_LOGON_NEW_CREDENTIALS, LogonProvider.LOGON32_PROVIDER_WINNT50) to Impersonate

https://platinumdogs.me/2008/10/30/net-c-impersonation-with-network-credentials/

and I get the same paths than user MyUser.

My code:

   using (new Impersonator(user, domain, password
                   , LogonType.LOGON32_LOGON_NEW_CREDENTIALS, LogonProvider.LOGON32_PROVIDER_WINNT50
                ))
  {
     Console.WriteLine("IMPERSONATE LOGON32_LOGON_NEW_CREDENTIALS with " + user);
         p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
         Console.WriteLine(p1);
         p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
         Console.WriteLine(p1);
         p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
         Console.WriteLine(p1);
         p1 = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
         Console.WriteLine(p1);
     }

Output:

IMPERSONATE LOGON32_LOGON_NEW_CREDENTIALS with user2

C:\Users\MyUser\Documents
C:\Users\MyUser
C:\Users\MyUser\Desktop
C:\Users\MyUser\Desktop

Kiquenet
  • 14,494
  • 35
  • 148
  • 243