Direitos de administrador para um único método
-
19-09-2019 - |
Pergunta
É possível exigir direitos de administrador para um único método?
Algo assim:
[RequireAdminRightsForThisMethod()]
private void TheMethod(){
// Do something
}
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.