我有一个 wpf 应用程序,它将在运行时打开一个文件夹,但它失败了(我尝试打开的任何价格文件夹都会失败)。这里我使用 Windows 的“以不同用户身份运行”功能(使用另一个普通用户,例如:TestUserA)。
例外:
System.ComponentModel.Win32Exception
HResult=0x80004005
Message=An error occurred trying to start
process'C:\Users\TestUserA\AppData\Local\Temp\log' with working directory
'C:\Program Files (x86)\MyApp'. Access is denied.
Source=System.Diagnostics.Process
StackTrace:
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo
startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
代码:
var startInfo = new ProcessStartInfo()
{
UseShellExecute = true,
FileName = dir,
Verb = "open"
};
using var process = Process.Start(startInfo);
我的思考:我以为如果应用程序以“TestUserA”用户运行,那么应用程序就有权限访问“TestUserA”用户的个人目录,比如临时目录,但实际情况是有权限问题,我很惊讶。
我测试了场景,没有问题:
1.双击直接运行(使用当前系统登录用户)或使用“以其他用户身份运行”并输入管理员凭据。 2.在应用程序中打开文件。
于是尝试浏览.net源代码(对我来说很难),通过异常信息,我发现异常可能是由于resolvedFilename变量为空引起的。是这个原因吗?
谁能告诉我如何解决?非常感谢!
经测试,使用其他普通用户启动Edge、Notepad++等时也存在这个问题。但我认为这是Windows的一个bug:为什么使用TestA用户运行应用程序时,应用程序无法访问TestA的个人目录?