Não acredito que seja possível elevar o processo atualmente em execução. É integrado ao Windows Vista que privilégios de administrador são dados a um processo na inicialização, pelo que entendi. Se você olhar para vários programas que utilizam UAC, você verá que eles realmente iniciam um processo separado cada vez que uma ação administrativa precisa ser executada (Gerenciador de Tarefas é um, Paint.NET é outro, o último sendo um aplicativo .NET na verdade )
A solução típica para este problema é especificar argumentos de linha de comando ao iniciar um processo elevado (a sugestão de abatishchev é uma maneira de fazer isso), de modo que o processo iniciado saiba apenas para exibir uma determinada caixa de diálogo e, em seguida, saia após esta ação ter sido concluído. Assim, dificilmente deve ser notado para o usuário que um novo processo foi iniciado e, em seguida, encerrado, e prefere aparecer como se uma nova caixa de diálogo dentro do mesmo aplicativo tivesse sido aberta (especialmente se você algum hackery para tornar a janela principal do processo elevado, filho do processo pai). Se você não precisa da IU para o acesso elevado, melhor ainda.
Para uma discussão completa do UAC no Vista, recomendo que você leia este artigo completo sobre o assunto (os exemplos de código estão em C ++, mas eu suspeito que você precisará usar o WinAPI e P / Invoke para fazer a maioria das coisas em C # de qualquer forma). Esperamos que você agora pelo menos veja a abordagem certa a ser tomada, embora projetar um programa compatível com o UAC esteja longe de ser trivial ...