我正在将C#WinForm应用程序转换为UWP。
旧应用正在使用pinvokeShellExecute
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");
我在应用程序中使用了很多次,并且有效