【问题标题】:AppData folder of user who runs application运行应用程序的用户的 AppData 文件夹
【发布时间】:2016-07-28 12:53:39
【问题描述】:

我目前正在使用这个:

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。而且我不喜欢使用 Substring 之类的东西(只有在我必须这样做时:)

【问题讨论】:

  • 那个用户以前登录过那台机器吗?如果没有,那么他们还没有文件夹。另外,您是否尝试在您的ProcessStartInfo 对象中设置LoadUserProfile = true
  • System.IO.Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)) + "ProgramData" like "C:\ProgramData" 不能被其他用户访问。我该如何解决它
  • 你现在在问不同的问题。
  • 对不起,我应该谢谢你 ;)

标签: c# wpf login appdata


【解决方案1】:

您需要在ProcessStartInfo 中设置LoadUserProfile = true,否则用户个人资料不可用:

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
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-07-28
    • 2012-03-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多