ACCESS_DENIED в приложении UWP с использованием ShellExecute - PullRequest
1 голос
/ 21 января 2020

Я конвертирую 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 от имени администратора .

1 Ответ

0 голосов
/ 21 января 2020

Может быть, вы можете попробовать

Diagnostics.Process.Start(@"C:\path\to\file\dummy.pdf");

Я много раз использовал это в своих приложениях, и это работает

...