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\DesktopIMPERSONATE 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
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