Приложение WPF - запросите права администратора во время выполнения - PullRequest
0 голосов
/ 01 апреля 2020

Только несколько опций в моем приложении WPF, требуются права администратора. Я бы хотел избежать принуждения запускать программу от имени администратора, поэтому есть ли возможность запрашивать права администратора во время выполнения, только в случае операции, которая требует этих привилегий?

Ответы [ 3 ]

1 голос
/ 01 апреля 2020

Вы можете добавить в свой проект файл манифеста приложения (app.manifest) и установите для requiredExecutionLevel значение наибольший доступный"/>

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
             If you want to change the Windows User Account Control level replace the 
             requestedExecutionLevel node with one of the following. -->


        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

        <!-- requestedExecutionLevel  level="asInvoker" uiAccess="false" /-->
        <!-- requestedExecutionLevel  level="requireAdministrator" uiAccess="false" /-->

      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
1 голос
/ 01 апреля 2020

Я не думаю, что вы можете улучшить существующий процесс. Но я нашел способ в PowerShell 5 запустить мой скрипт в новом повышенном процессе. Надеюсь, это поможет

# Get the ID and security principal of the current user account
$myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID);

# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;

# Check to see if we are currently running as an administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
    # We are running as an administrator, so change the title and background colour to indicate this
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)";
    $Host.UI.RawUI.BackgroundColor = "DarkBlue";
    Clear-Host;
}
else
{
    # We are not running as an administrator, so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it's path
    $newProcess.Arguments = "& '" + $script:MyInvocation.MyCommand.Path + "'"

    # Indicate that the process should be elevated
    $newProcess.Verb = "runas";

    # Start the new process
    [System.Diagnostics.Process]::Start($newProcess);

    # Exit from the current, unelevated, process
    Exit;
}
0 голосов
/ 01 апреля 2020
  1. Добавьте файл манифеста в следующую папку.

Manifest location

Измените строку 19 на следующий код в манифесте.

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

При запуске он выдаст запрос администратору.
...