2009-10-16 12 views
41

He creado una aplicación .NET C# WinForms en Win 7 RTM x64, que digamos que he llamado a DataInstaller.Asistente de compatibilidad de programas piensa que mi aplicación es un instalador

Cuando ejecuto este programa fuera del depurador (solo un formulario vacío sin funcionalidad en este momento), funciona bien hasta que cierro el formulario. Entonces consigo un mensaje del Asistente para la compatibilidad del programa que dice:

Este programa podría no haberse instalado correctamente

I a continuación, obtener la opción de volver a instalar con la configuración recomendada o decir que la instalación se hizo el trabajo como se esperaba.

Si nombro la aplicación 'DataThingy' esto no es un problema, supongo que esto está relacionado con la forma en que los programas llamados * Setup obtienen un icono de escudo UAC.

Supongo que habrá algo simple que puedo poner en el manifiesto de la aplicación para evitar esto?

No estoy seguro de si esto ocurre en Vista ya que no tengo acceso actualmente.

Cambiar el nombre no es una opción y desactivar el UAC no es una opción, así que no sugiera esto.

Editar:

OMG.

Parece que si cualquiera de lo siguiente es cierto, UAC se pega su remo en:

nombre Exe contiene la palabra instalador

AssemblyInfo.cs

AssemblyTitle contains the word 'Installer' 
    e.g. [assembly: AssemblyTitle("DataInstaller")] 
AssemblyProduct contains the word 'Installer' 
    e.g. [assembly: AssemblyProduct("Data Installation Utility")] 

'instalador' puede también ser 'Configuración'.

Me da por creer, realmente lo hace. Obviamente, uno de los antiguos programadores de VB6 fue reubicado en el equipo de UAC en Redmond.

Todavía necesito una solución alternativa, no estoy dispuesto a aceptar que mi aplicación no pueda ser llamada un instalador porque no toca el registro ni pone ningún archivo en la carpeta Archivos de programa.

Supongo que UAC pondría la máquina en el bloqueo total si traté de ejecutar mi aplicación llamada IAmAVirus.exe. (En realidad, no lo intento porque no estoy del todo convencido de que estoy siendo tonto)

+3

En realidad, Windows simplemente comprueba el nombre de archivo para palabras como "configuración" o "instalar" para determinar si algo es un instalador o no. Sí, es tonto ... ¿Se puede hacer algo al respecto? Me pregunto ... Bueno Q, sin embargo. –

+0

Espero que sí, porque es demasiado "mágico" para mi gusto ... ¡gracias por la votación! – Carl

+2

@Wim - No, parece ser AssemblyTitle como sugiere la publicación. Verificado en mi máquina Win7 SP1 para PackageInstaller.exe - no hay problema si el título del ensamblado es PackageNstaller –

Respuesta

41

Agregue esto en su manifiesto.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
    <!--The ID below indicates application support for Windows Vista --> 
    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
    <!--The ID below indicates application support for Windows 7 --> 
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    <!--The ID below indicates app support for Windows 8 --> 
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
    <!--The ID below indicates app support for Windows 8.1 --> 
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 
    </application> 
</compatibility> 

Los GUID para todos los sistemas operativos en el ejemplo anterior proporcionan soporte de nivel inferior. Las aplicaciones que admiten múltiples plataformas no necesitan manifiestos por separado para cada plataforma.

Tomado de App (executable) manifest.

+0

¡Funciona como un encanto, incluso cuando se implementa en ProgramFiles! Gracias Justin. – Carl

+1

Esto no hizo ninguna diferencia cuando lo probé ... mi herramienta se llama "ccsetup" ya que reemplaza la herramienta de configuración original con ese nombre, pero siempre que el nombre o la información de la versión tengan la palabra "configuración" en es, la basura de compatibilidad sigue apareciendo. Cuando lo elimino, el problema desaparece inmediatamente, pero no quiero que tenga un nombre diferente. – Nyerguds

+4

{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} para Windows 8. Lea más: http://msdn.microsoft.com/en-us/library/windows/desktop/hh848036(v=vs.85).aspx – mjb

3

Like Workshop Alex hará una suposición basada en nombres de archivo.

¿Pero ha intentado agregar un archivo de manifiesto? Eso le permite especificar qué derechos de acceso necesita para ejecutar la aplicación.

MSDN on how to create one from Visual studio Otro artículo de enlace que help.

+1

Simplemente agregando el manifiesto hizo el truco (aunque lo intenté antes de publicar esto, ¡honesto!). Para obtener más información, consulte: http://blogs.msdn.com/cjacks/archive/2009/06/18/pca-changes-for-windows-7-how-to-tell-us-you-are -not-an-installer-take-2-because-we-changed-the-rules-on-you.aspx y http://technet.microsoft.com/en-us/library/dd638326%28WS.10%29 .aspx. Gracias. – Carl

+0

Como actualización, no, esto no funcionó. Tan pronto como el exe se implementa en otra ubicación, como , la PCA vuelve a mostrar su horrible cabeza. – Carl

+1

Pregunta anterior, pero el nombre del archivo era lo que estaba haciendo por mí. Cambié el instalador a la herramienta y funcionó bien. Gracias por el consejo @EKS – DTown

2

Acabo de tener este problema y terminé solucionándolo asegurándome de que el título de mi ensamblaje dentro del archivo AssemblyInfo.cs y el nombre del ensamblado de mi archivo cs.proj coincidieran. Cuando no estaban sincronizados, lanzaba este error, haciéndolos iguales hacía que desapareciera. No estoy seguro de si se aplica a su situación, pero el mismo error en circunstancias similares, podría valer la pena intentarlo y evitar la respuesta aceptada de ignorar el error todos juntos.

+0

Ese es exactamente el problema al que me enfrentaba. Gracias por señalarlo hombre, a pesar de que la pregunta fue respondida. Estaba pensando que era una configuración manifiesta pero que había cambiado el 'Nombre del ensamblado' en las propiedades del proyecto y que no coincidía con el 'Espacio de nombres predeterminado'. – strider

Cuestiones relacionadas