en primer lugar - de hecho, no está permitido por el diseño, de instalar y ClickOnce aplicación como administrador: http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx
echar un vistazo a este post: http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - Explica cómo ejecutar ClickOnce aplicación como administrador. PERO - tiene que decir que he recorrido este camino - y no tuve mucha suerte con eso. Tuve numerosos problemas con este enfoque (tratando de ejecutar la aplicación ClickOnce con privilegios de administrador). Por lo que recuerdo, el mayor problema fue que la actualización automática no funcionaba correctamente. Sin mencionar que los usuarios que no son administradores pueden necesitar ingresar credenciales de administrador todo el tiempo.
Así que mi consejo sería reconsiderar su lógica, y encapsular la pieza que necesita ser hecho como administrador en un archivo EXE independiente - y que quede muy claro para un usuario que cuando se hace clic en ese botón, UAC aparecerá (probablemente agregando el ícono de "escudo" al botón). Y en ese caso Button_Click hacer algo como esto:
// 2. Run Photoshop action on this image (and wait for the task to complete)
if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false)
{
var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath, "\"" + imgPhotoshopActionAbsPath + "\"");
pi.UseShellExecute = true;
pi.Verb = "runas";
var photoshopAction = Process.Start(pi);
var success = photoshopAction.WaitForExit();
if (success == false)
{
// do something here
}
}
este enfoque funcionó muy bien para mí. La clave aquí es la siguiente:
pi.UseShellExecute = true;
pi.Verb = "runas";
se ejecuta el archivo EXE con el administrador de la derecha - así UAC se mostrará en ese momento. Otra buena consecuencia aquí es que los usuarios pueden no ejecutar esta pieza de lógica en particular cada vez que usan la aplicación y, por lo tanto, no se molestarán con el aviso cuando no lo necesiten.
y sin indicación de UAC? – Atoxis
@Matth Lo siento, no tengo clara tu pregunta. El objetivo es ejecutar ALGUNOS códigos en modo elevado. A menos que sea un administrador, necesita ese aviso para elevar su aplicación. – avs099
Los ingenieros que utilizarán esta aplicación son una cuenta de usuario en la computadora. la aplicación realiza el proceso de los prvilèges que requiere un administrador. En el exterior, por razones de seguridad, es impensable que se proporcione su cuenta de administrador. Solo quiero ser transparente con el usuario. y el mismo principio que ya he logrado invocador proceso sin UAC gracias a los comandos p.StartInfo.UserName = "usuario" p.StartInfo.Password = "secreta" pero se que se muestra la única preocupación de mi línea de comandos . Aunque me gusta eso, se ejecuta en segundo plano. – Atoxis