visual tutorial temas studio para linea iconos español ejecutar configurar code ajuste visual-studio visual-studio-2008 installation setup-project

visual-studio - tutorial - visual studio code español



En un proyecto de instalación de Visual Studio, ¿cómo genero un script de desinstalación? (8)

Tengo un proyecto de instalación de Visual Studio. Tras la instalación, crea un archivo por lotes de desinstalación en la carpeta de la aplicación. Si el usuario desea desinstalar el producto, puede ir a "Agregar o quitar programas", o simplemente puede hacer doble clic en desinstalar.cmd. Los contenidos son:

%windir%/system32/msiexec /x {CC3EB7BF-DD82-48B9-8EC5-1B0B62B6D285}

El GUID allí es el ProductCode del proyecto de instalación en Visual Studio.

Pero, para que las actualizaciones funcionen correctamente, tengo que incrementar el número de Versión, cada vez que produzco un nuevo MSI. Y, si incremento el número de Versión, también tengo que generar un Guid nuevo para el Código de Producto. Lo que significa que el archivo static uninstall.cmd necesita cambiar.

¿Cómo puedo generar dinámicamente un archivo por lotes que contenga el Código de Producto para el momento de la compilación?


Acabo de hacer this trabajo:

Agregue un archivo uninstall.bat a su proyecto. El contenido del archivo es:

msiexec.exe /x %1

Cree un acceso directo a ese archivo por lotes (por ejemplo, en el menú del programa del usuario), especifique en las propiedades del acceso directo, junto a Argumentos: [ProductCode] .


Cada vez que genera una configuración, siempre cambie el código del producto. cree un método abreviado de desinstalación y allí encontrará la técnica de paso de argumentos de la línea de comando para ordenar el corte. Allí escribirá siempre el código de producto "uu código". Debe escribir aquí siempre.

Pon este código en el método principal del archivo program.cs

[STAThread] static void Main() { bool flag = true; string[] arguements = Environment.GetCommandLineArgs(); foreach (string str in arguements) { if ((str.Split(''=''))[0].ToLower() == "/u") { if (MessageBox.Show("Do you want to uninstall job board", "Are you Sure?", MessageBoxButtons.YesNo) == DialogResult.Yes) { flag = false; RemoveRegSettings(); RemoveIniFile(); string guid = str.Split(''='')[1]; string path = Environment.GetFolderPath(Environment.SpecialFolder.System); ProcessStartInfo si = new ProcessStartInfo(path + @"/msiexec.exe", "/i" + guid); Process.Start(si); Application.Exit(); return; } } } // //************************************************ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);


Encontré esta solución here

"Al usar Visual Studio 2005/2008, no necesita escribir ningún código para agregar una opción de desinstalación para un proyecto de instalación (sí, sé que algunas personas pueden escribir código para hacerlo)

1) En el Proyecto de configuración -> Ventanas del sistema de archivos -> Haga clic derecho en "Sistema de archivos en la máquina de destino" -> agregue una carpeta especial, seleccione Carpeta del sistema;

2) En esta carpeta del sistema Agregar un archivo. Busque msiexec.exe en la carpeta local de System32 y agréguelo. Reemplace las propiedades predeterminadas de este archivo de la siguiente manera:

Condición: = No instalado (asegúrese de poner ''No instalado'' exactamente así, el mismo caso y todo), Permanente: = Verdadero, Sistema: = Verdadero, Transitivo: = Verdadero, Vital: = Falso.

3) Cree un nuevo acceso directo en ''Menú del programa de usuarios'', establezca Destino en la carpeta del sistema que creó en el paso 1. y apunte a la msiexec.exe. Cambie el nombre del acceso directo a ''Desinstalar su aplicación''. Establezca la propiedad Argumentos en / x {espacio} [Código de producto].

4) Genere el proyecto, ignore la advertencia sobre el hecho de que se debe excluir msiexec, NO lo excluya o el proyecto de instalación no se compile.

La condición ''No instalado'' y Permananet: = Verdadero aseguran que el msiexec.exe solo se coloque en la carpeta del sistema como parte de la instalación SI no existe y no se elimina en una desinstalación, por lo tanto; Es bastante seguro ignorar esa advertencia e ir por ella.

(Basado en la descripción de SlapHead) "


Este es el script que escribí que crea un uninstall.cmd. Se ejecuta como una acción personalizada durante la instalación.

var fso, ts; var ForWriting= 2; fso = new ActiveXObject("Scripting.FileSystemObject"); var parameters = Session.Property("CustomActionData").split("|"); var targetDir = parameters[0]; var productCode = parameters[1]; ts = fso.OpenTextFile(targetDir + "uninstall.cmd", ForWriting, true); ts.WriteLine("@echo off"); ts.WriteLine("goto START"); ts.WriteLine("======================================================="); ts.WriteBlankLines(1); ts.WriteLine(" Uninstall.cmd"); ts.WriteBlankLines(1); ts.WriteLine("======================================================="); ts.WriteBlankLines(1); ts.WriteLine(":START"); ts.WriteLine("@REM The uuid is the ''ProductCode'' in the Visual Studio setup project"); ts.WriteLine("%windir%//system32//msiexec /x " + productCode); ts.WriteBlankLines(1); ts.Close();

El resultado es un archivo cmd que siempre tiene el Código de Producto actual.

La desventaja de esto es que? El script que crea el uninstall.cmd permanece en el directorio de instalación. No es un gran problema, pero no me gusta la basura en el directorio de instalación. Todavía no he intentado que el "createInstaller.js" se elimine automáticamente. Aquello podría funcionar.

EDIT : sí, hacer que createInstaller.js se elimine correctamente funciona.

¡Voy a aceptar mi propia respuesta!


Hice una combinación de la respuesta aceptada y la respuesta de Locksmith para no ver ningún parpadeo del símbolo del sistema o el mismo comando. Un profesional de hacerlo así es que NO TIENES que crear un acceso directo y establecer los argumentos para que funcione.

Mi archivo createUninstaller.js:

var fso, ts; var ForWriting= 2; fso = new ActiveXObject("Scripting.FileSystemObject"); var parameters = Session.Property("CustomActionData").split("|"); var targetDir = parameters[0]; var productCode = parameters[1]; ts = fso.OpenTextFile(targetDir + "Uninstall.js", ForWriting, true); ts.WriteLine("var v = new ActiveXObject(/"Shell.Application/");"); ts.WriteLine("v.ShellExecute(/"msiexec.exe/", /"/x "+productCode+"/", /"/", /"open/",10);"); ts.Close();

Este archivo se agrega como acción personalizada en el ''directorio'' de acción de confirmación. Para llegar realmente a estas acciones personalizadas: haga clic derecho en su proyecto de configuración> ver> acciones personalizadas> haga clic derecho en cometer ''directorio''> agregar acción personalizada. Después de que tenga que buscar el archivo createUninstaller.js que creó y añádalo.

Ahora, para que createUninstaller.js lea las variables targetDir y productCode, debe
Haga clic con el botón derecho en el archivo createUninstaller.js en el directorio de ''acción'' personalizada del proyecto de instalación y vaya a la ventana de propiedades. En propiedades verá la propiedad ''CustomActionData''. Allí simplemente copie pegar [TARGETDIR] | [ProductCode]
¡Y voilá! Ahora debería agregar el archivo Uninstall.js que funcionará tan pronto como haga doble clic en él.


Me doy cuenta de que esta pregunta ya ha sido respondida, pero lo que hice fue crear un archivo por lotes con el siguiente contenido:

start msiexec.exe /x %1

El uso de "inicio" evita que el símbolo del sistema permanezca abierto durante el proceso de desinstalación y% 1 se reemplaza por el primer argumento que se pasa al archivo por lotes al ejecutarlo.

Agregué el archivo por lotes a la carpeta de la aplicación y creé un acceso directo del menú que apunta al archivo por lotes. Si haces click derecho en el acceso directo y seleccionas Ventana de Propiedades. Allí, agregue el siguiente texto a la propiedad Argumentos:

[ProductCode]

Después de construir y ejecutar el instalador, tendrá un acceso directo del menú de inicio que llama al archivo por lotes y pasa el código del producto tal como estaba cuando se creó esa versión de la aplicación. El usuario verá un aviso preguntando si el producto debe desinstalarse.

El único inconveniente de esta solución es que si el usuario navega a la carpeta de la aplicación y hace doble clic en el archivo por lotes, el programa de desinstalación dará un error de que el paquete de instalación no existe.



una ligera variación en el enfoque de archivo por lotes. Si no desea mostrar una ventana de comandos, use un archivo wscript. suministre [ProductCode] como antes en Argumentos

<job> <?job debug="true" error="true" ?> <script language="JScript"> var arg = []; for (var i=0; i<WSH.Arguments.length; i++) { arg.push( WSH.Arguments.Item(i) ); } if (arg.length>0) { var productcode = arg[0]; var v = new ActiveXObject("Shell.Application"); v.ShellExecute("msiexec.exe", "/x "+productcode, "", "open", 10); } WSH.Quit(0); </script> </job>