使用 Process.Start() 打开文件夹时出现访问被拒绝异常(通过“以其他用户身份运行”)

问题描述 投票:0回答:1

我有一个 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变量为空引起的。是这个原因吗?

谁能告诉我如何解决?非常感谢!

c# wpf process.start
1个回答
0
投票

经测试,使用其他普通用户启动Edge、Notepad++等时也存在这个问题。但我认为这是Windows的一个bug:为什么使用TestA用户运行应用程序时,应用程序无法访问TestA的个人目录?

© www.soinside.com 2019 - 2024. All rights reserved.