c# - 使用 ShellExecute 在 UWP 应用程序中访问 ACCESS_DENIED
问题描述
我正在将 C# WinForm 应用程序转换为 UWP。
旧应用程序使用 pinvoke ShellExecute
API 来打开一些文件。我正在尝试将相同的代码复制到新应用程序,但出现异常。
这是我的代码:
public static readonly int SHELL_EXECUTE_ERROR_CODE_LIMIT = 32;
[DllImport("shell32.dll")]
static extern IntPtr ShellExecute(
IntPtr hwnd,
string lpOperation,
string lpFile,
string lpParameters,
string lpDirectory,
/*ShowCommands*/int nShowCmd);
private void btnPinvoke_Click(object sender, RoutedEventArgs e)
{
int ret = 0;
IntPtr retPtr = ShellExecute(IntPtr.Zero, "open", @"C:\path\to\file\dummy.pdf", "", "", /*ShowCommands.SW_SHOWNOACTIVATE*/4);
ret = retPtr.ToInt32();
if (ret <= SHELL_EXECUTE_ERROR_CODE_LIMIT) //Failure
{
lblResult.Text = "Error " + ret;
}
}
返回的错误代码是 5。
ERROR_ACCESS_DENIED
5 (0x5)
你能帮我理解为什么我得到 ACCESS_DENIED 异常吗?
以管理员身份运行 Visual Studio 时也会发生这种情况。
解决方案
也许你可以试试
Diagnostics.Process.Start(@"C:\path\to\file\dummy.pdf");
我在我的应用程序中多次使用它并且它有效
推荐阅读
- python - 使用 ipywidgets 将 Excel 计算转换为 Python 中的动态计算
- asp.net - 向 ASP.NET 请求活动添加标记
- tensorflow - 针对监管要求的不一致监管材料的文本分类
- cloudflare - Sveltekit 开发与workers KV -- 热重载
- docker - Docker kubernetes 集群中的入口配置问题
- python - 遍历文件并删除保留字
- centos7 - 为 Outlook 通讯簿查找配置 OpenLDAP 2.4
- android - 没有方法签名: build_9oqkz1yq0b57t4arqvsiar91y.android() 适用于参数类型:
- python - 尝试将变量输入到 sql 数据库中已创建的行中
- r - 将 nudge_y 添加到“抖动”R ggplot2 图的数据标签 - 分类值