msbuild installshield

msbuild - Installshield Build Automation



(1)

He visto muchas soluciones para automatizar mi build de InstallShield, pero tengo problemas con cada una. Estoy usando InstallShield Professional 2013. Perdón por la larga pregunta, pero no tengo idea de qué dirección tomar para resolver mis problemas.

1) IsCmdBld.exe : tengo un script que se ejecuta y creará mi instalador. PERO, cuando se ejecuta el instalador, aparece un mensaje de error que dice "The System Administrator has set policies to prevent this installation" . No estoy seguro de por qué sucede esto, pero no obtengo el mismo mensaje de error si construyo el instalador a través del diseñador. EDITAR: Aquí está mi comando (% guid% es una Guid que genero para configurar el Código del producto):

for /f %%i in (''"C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin/uuidgen.exe"'') do set guid=%%i "C:/Program Files (x86)/InstallShield/2013 SP1 SAB/System/ISCmdBld.exe" -p "MyInstaller.ism" -r SingleImage -y "1.0.0.13" -z ProductCode=%guid%

2) InstallShield Automation Interface - He seguido numerosos ejemplos y tutoriales sobre esto, pero todos terminan en el mismo resultado. Cuando llamo al siguiente código:

var project = new ISWiAuto20.ISWiProject();

Me sale este error:

Unable to cast COM object of type ''System.__ComObject'' to interface type ''ISWiAuto20.ISWiProject''. This operation failed because the QueryInterface call on the COM component for the interface with IID ''{872D23A7-C18D-468C-895D-1CF027E4FBB1}'' failed due to the following error: Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

3) MsBuild.exe - Ejecutar MsBuild en mi archivo de proyecto InstallShield produce este error:

error NSB4025: The project file could not be loaded. Invalid character in the given encoding. Line 1, position 1


La elección entre estos enfoques (cuando todos funcionan) depende en gran medida del sistema de compilación con el que intente integrarse. Si está utilizando un enfoque por lotes o makefile, IsCmdBld.exe es probablemente el punto de partida más fácil. Si está utilizando Visual Studio y TFS o MSBuild, probablemente tenga más suerte allí, ya que informará los errores de una manera que el sistema de compilación pueda comprender. (Aparte de eso, son fundamentalmente similares.) Si necesita realizar ajustes en el proyecto antes de construirlo, la capa de automatización puede aumentar o reemplazar los otros enfoques.

Pero en tu caso dices que todos no funcionan. ¿Qué has hecho para diagnosticar por qué? Estos son los primeros pasos que tomaría para cada uno de esos síntomas:

  • Las configuraciones construidas de IsCmdBuild producen un error que los IDE-build no hacen. Primero identifique cuál es realmente el problema. Busque en un registro detallado para obtener más información. Cree ambas formas con .msi disponible y compare los resultados con MsiDiff. Asegúrate de haber realizado una prueba elevada. Dependiendo de lo que encuentre, puede ser algo para abordar en el proyecto, el proceso de compilación o un error en InstallShield.
  • La interfaz de automatización produce TYPE_E_LIBNOTREGISTERED. En primer lugar, si esta es la máquina IDE, considere reparar la instalación. Si se trata de una máquina de construcción independiente, ídem. Si se trata de una máquina de construcción independiente que no utilizó la instalación, debería, o al menos debería asegurarse de que las dependencias estén presentes y de que la interfaz de automatización esté registrada. En segundo lugar, como señaló Christopher Painter, InstallShield es un producto de 32 bits, por lo que debe invocarse desde un contexto de 32 bits. Si llama, por ejemplo, a CScript para ejecutar un archivo .vbs, asegúrese de estar utilizando C:/Windows/SysWow64/CScript.exe .
  • MSBuild NSB4025. El comentario de stijn es bastante correcto: no se puede llamar a MSBuild en el archivo .ism (mientras que puede ser xml en lugar de binario, no es compatible con MSBuild). Sin embargo, puede crear un archivo .isproj que pueda funcionar correctamente. Guarde el proyecto en Visual Studio, o copie <InstallShield>/Support/0409/MSBuild.xml en (ProjectName).isproj y (ProjectName).isproj su contenido; llama a MSBuild en el archivo .isproj resultante. Las probabilidades son fuertes, esto tendrá aproximadamente los mismos resultados que IsCmdBuild, ya que la parte de construcción se comparte en gran medida.