2016-07-28 4 views
2

настоящее время я использую это:AppData папку пользователя, который работает приложение

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

для доступа к папке AppData зарегистрированного пользователя в результате путь, как это:.

"C:\\Documents and Settings\\Michael\\Application Data" 

Но: Чтобы запустить программу на другой пользователь, я начинаю новый процесс, как это:

try {  
    var processInfo = new ProcessStartInfo() { 
     FileName = System.Reflection.Assembly.GetExecutingAssembly().Location, 
     UserName = txtWinLoginUsername.Text, 
     Password = txtWinLoginPassword.SecurePassword, 
     Domain = this.domain, 
     UseShellExecute = false, //kein Plan 
    }; 
    //start program 
    Process.Start(processInfo); //execute 
    Application.Current.MainWindow.Close(); //close current Window if it worked 
} catch { 
    //Windows login failed //reset PasswordBox etc. 
} 

и убить текущий.

Так что я хочу новая папка AppData, но результаты AppData вызовов в умолчательном:

"C:\\Documents and Settings\\Default\\Application Data" 

Что мне нужно это ApplicationData пользователя нити моя программа работает в. И я не хотел бы использовать что-то вроде подстроки (только если я должен :)

+0

Был ли этот пользователь когда-либо зарегистрирован на этой машине раньше? Если нет, то у них еще не будет папки. Кроме того, попробовали ли вы установить параметр LoadUserProfile = true в свой объект 'ProcessStartInfo'? – DavidG

+0

'System.IO.Path.GetPathRoot (Environment.GetFolderPath (Environment.SpecialFolder.System)) +« ProgramData »' like «C: \ ProgramData» недоступен другому пользователю. Как это исправить? – Michael1248

+0

Вы задаете разные вопросы сейчас. – DavidG

ответ

1

Вы должны установить LoadUserProfile = true в ваших ProcessStartInfo иначе пользователей профиль не доступен:

var processInfo = new ProcessStartInfo 
{ 
    FileName = System.Reflection.Assembly.GetExecutingAssembly().Location, 
    UserName = txtWinLoginUsername.Text, 
    Password = txtWinLoginPassword.SecurePassword, 
    Domain = this.domain, 
    UseShellExecute = false, //kein Plan 
    LoadUserProfile = true 
    //^^^^^^^^^^^^^^^^^^^^ 
    //Add this line 
};