Pergunta

É possível exigir direitos de administrador para um único método?

Algo assim:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}
Foi útil?

Solução

Você pode adicionar um PrincipalPermission Atributo ao seu método para exigir privilégios administrativos para sua execução:

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
public void MyMethod()
{
}

Isso é descrito em mais detalhes no seguinte artigo:

Princípios de segurança e direitos de administrador local em C# .NET

Se você está procurando uma maneira de elevar um processo já existente, duvido que isso seja possível, pois os privilégios do administrador são dados no nível do processo a um processo após a inicialização (consulte este relacionado pergunta). Você teria que executar seu aplicativo "como administrador" para obter o comportamento desejado.

No entanto, existem alguns truques que podem permitir que você faça o que quiser, mas esteja avisado de que isso pode abrir riscos graves de segurança. Veja o seguinte tópico nos fóruns do MSDN:

Lançando o Myelevatedcom Server sem solicitar credenciais do administrador do usuário padrão

Atualização (do comentário)

Parece que, se uma atualização exigir elevação, a atualização do aplicativo é melhor realizada por um processo separado (outro executável ou seu aplicativo chamado com uma chave de linha de comando). Para esse processo separado, você pode solicitar elevação da seguinte maneira:

var psi = new ProcessStartInfo();
psi.FileName = "path to update.exe";
psi.Arguments = "arguments for update.exe";
psi.Verb = "runas";

var process = new Process();
process.StartInfo = psi;
process.Start();   
process.WaitForExit();

Outras dicas

Um método pode exigir que os privilégios administrativos sejam executados, mas não é possível elevar automaticamente para administrar ao executar um método.

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