Win32Exception 访问被拒绝

Posted

技术标签:

【中文标题】Win32Exception 访问被拒绝【英文标题】:Win32Exception Access Denied 【发布时间】:2021-09-04 14:02:30 【问题描述】:

所以我试图在 C# 中运行 python 代码。但是当我尝试执行命令时,我收到一条错误消息:

System.ComponentModel.Win32Exception: 'Access Denied'

代码:

private void run_cmd(string cmd, int args)
        
            ProcessStartInfo start = new ProcessStartInfo();
            start.FileName = "C://Users//user//AppData//Local//Microsoft//WindowsApps//python.exe";
            start.Arguments = string.Format("0 1", cmd, args);
            start.UseShellExecute = false;
            start.RedirectStandardOutput = true;
            using (Process process = Process.Start(start))
            
                using (StreamReader reader = process.StandardOutput)
                
                    string result = reader.ReadToEnd();
                    Console.Write(result);
                
            
        

错误发生在:

using (Process process = Process.Start(start))

【问题讨论】:

该错误通常意味着权限断开。为什么“python”安装在 AppData 下 - 它不应该在“C:\\Program files”下吗?是否为所有用户安装了“python”?您的应用是服务还是需要以管理员身份运行的东西? 你的应用是 UWP 应用吗? 是的,该应用是 uwp 应用 我尝试从 windows 商店运行 python 和在我的 venv 中运行 python。但两者都给了我同样的错误。到目前为止,我的应用程序非常基本,所以我认为我不需要任何特权来运行它。 你检查我的答案了吗?它解决了你的问题吗? 【参考方案1】:

Process.Start Method 在 UWP 应用中不受支持。要从你的 UWP 应用程序运行 exe 文件,我建议你使用FullTrustProcessLauncher Class。

首先,您需要将exe文件复制并保存在UWP应用程序包中,例如Assets文件夹。然后请转到 Manifest 文件并添加 runFullTrust 受限功能。(App capability)。接下来,为 UWP 项目添加 Windows Desktop Extensions 的引用。最后,您可以调用await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(); 从您的应用程序中启动该exe 文件。

【讨论】:

以上是关于Win32Exception 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

事件日志、模拟和拒绝访问 Win32Exception

尝试从网站打开 exe 应用程序时访问被拒绝

User32.DLL SetFocus 失败并出现 Win32 错误 5:访问被拒绝

python修改注册表拒绝访问

报错 System.ComponentModel.Win32Exception:拒绝访问,如何以管理员身份调试应用程序

WMI 访问被拒绝问题