Pergunta

Depois que meu programa é instalado em uma máquina cliente, como forço meu programa a ser executado como administrador no Windows 7?

Foi útil?

Solução

Você deseja modificar o manifesto que é incorporado no programa. Isso funciona no Visual Studio 2008 e superior: Project + Adicionar novo item, selecione "Arquivo de manifesto do aplicativo". Mudar o <requestedExecutionLevel> elemento para:

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

O usuário recebe o Uac Prompt quando eles iniciarem o programa. Use sabiamente; Sua paciência pode se desgastar rapidamente.

Outras dicas

Adicionando a requestedExecutionLevel O elemento ao seu manifesto é apenas metade da batalha; você tem que se lembrar disso Uac pode ser desligado. Se for, você deve executar a verificação da velha escola e colocar uma caixa de diálogo de erro se o usuário não for administrador
(ligar IsInRole(WindowsBuiltInRole.Administrator) no seu tópico CurrentPrincipal).

As etapas detalhadas são as seguintes.

  1. Adicionar arquivo de manifesto do aplicativo à solução
  2. Altere a configuração do aplicativo para "App.Manifest"
  3. Atualizar a tag de "RequestEdExecutionLevel" para exigir o Ministrador.

Adding file in Solution

Select Application Manifest File

Select Manifest option

Update Manifest file

Observe que, usando este código, você precisa desativar as configurações de segurança do ClickOnce, para fazer isso, entre em propriedades -> segurança -> clickonce segurança

Eu implementei algum código para fazer isso manualmente:

using System.Security.Principal;
public bool IsUserAdministrator()
{
    bool isAdmin;
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    return isAdmin;
}

Você pode incorporar um arquivo de manifesto no arquivo EXE, que fará com que o Windows (7 ou superior) seja executado sempre o programa como administrador.

Você pode encontrar mais detalhes em Etapa 6: Crie e incorpore um manifesto de aplicativo (UAC) (MSDN).

Enquanto trabalhava no Visual Studio 2008, clique com o botão direito do mouse Project -> Add New Item e então escolheu Application Manifest File.

No arquivo manifesto, você encontrará a tag requestedExecutionLevel, e você pode definir o nível para três valores:

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

OU

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

OU

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

Para definir seu aplicativo para executar como administrador, você deve escolher o do meio.

Conforme

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

Você deseja adicionar um manifesto de aplicativo se ainda não tiver um ou não saber como adicionar um. Como alguns projetos não adicionam automaticamente um arquivo de manifesto separado, primeiro vá para as propriedades do projeto, navegue para o Inscrição guia e verifique se o seu projeto não está excluindo o manifesto na parte inferior da torneira.

  • Em seguida, Projeto Clique com o botão direito do mouse
  • Adicionar novo item
  • Por último, encontre e clique em arquivo de manifesto do aplicativo

No Visual Studio 2010, clique com o botão direito do mouse no nome do projeto. Pressione "View Windows Configurações", isso gera e abre um arquivo chamado "App.Manifest". Dentro deste arquivo, substitua "asinvoker" por "requereadMinistrator", conforme explicado nas seções comentadas dentro do arquivo.

Outra maneira de fazer isso, apenas em código, é detectar se o processo está sendo executado como administrador como em A resposta de @ng.. E depois abra o aplicativo novamente e feche o atual.

Uso esse código quando um aplicativo só precisa de privilégios de administrador quando executados sob determinadas condições, como ao instalar -se como um serviço. Portanto, não precisa ser executado como administrador o tempo todo, como as outras respostas também a forçam.

Nota no código abaixo NeedsToRunAsAdmin é um método que detecta se, sob condições atuais, forem necessários privilégios de administrador. Se isso retornar false O código não se elevará. Esta é uma grande vantagem dessa abordagem sobre os outros.

Embora esse código tenha as vantagens declaradas acima, ele precisa relançar como um novo processo que nem sempre é o que você deseja.

private static void Main(string[] args)
{
    if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
    {
        ProcessStartInfo proc = new ProcessStartInfo();
        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = Assembly.GetEntryAssembly().CodeBase;

        foreach (string arg in args)
        {
            proc.Arguments += String.Format("\"{0}\" ", arg);
        }

        proc.Verb = "runas";

        try
        {
            Process.Start(proc);
        }
        catch
        {
            Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
        }
    }
    else
    {
        //Normal program logic...
    }
}

private static bool IsRunAsAdmin()
{
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(id);

    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

Esta é uma versão simplificada do responda, acima por @ng

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch
    {
        return false;
    }
}

Você pode criar o manifesto usando as configurações de segurança do ClickOnce e desativá -lo:

Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings

Depois de clicar nele, um arquivo será criado sob a pasta Propriedades do projeto chamada App.Manifest Uma vez criado, você pode desmarcar o Enable ClickOnce Security Settings opção

Abra esse arquivo e altere esta linha:

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

para:

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

Isso fará com que o programa exija privilégios de administrador.

Clique com o botão direito do mouse em seu executável, vá para Propriedades> Compatibilidade e verifique a caixa 'Execute este programa como admin'.

Se você deseja executá -lo como administrador para todos os usuários, faça a mesma coisa em 'Configuração de alterações para todos os usuários'.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top