Pergunta

Estou usando o VisualStudio2005 e um VDProj para criar um arquivo MSI simples. Preciso passar na propriedade Reinstallmode quando a iniciar.

Eu sei que isso pode ser feito via linha de comando, como assim:msiexec.exe /i foo.msi REINSTALLMODE=amus

No entanto, se um usuário optar por clicar diretamente no MSI (iniciando o assistente), a propriedade não será passada. É possível fazer isso através do VS e VDProj?

Algumas opções que investigei:

  • Quando eu construo o MSI via VS, ele também produz um setup.exe. Existe uma maneira de passar na propriedade Reinstallmode por isso, talvez?
  • Eu instalei o ORCA, que me permite visualizar/editar a tabela de propriedades do MSI. Eu poderia adicioná -lo dessa maneira, mas então eu teria que adicioná -lo toda vez que faço uma construção MSI.

Obrigado por qualquer conselho.

Foi útil?

Solução

Infelizmente, não consigo encontrar uma maneira de definir outras propriedades do MSI no VStudio.

No entanto, um método que deve funcionar é o seguinte:

  1. Use o ORCA para criar uma transformação (MST) que altere apenas a propriedade reinstallmode. (Em resumo, você edita a propriedade e salva como uma nova transformação e usa o comando "Gerate Transform" para criar o MST.)
  2. Esta transformação pode ser aplicada diretamente ao seu MSI usando o Msitran.exe Comando (disponível no mesmo Windows Installer SDK, onde você encontrou orca).
  3. Você pode: (a) Encontre uma maneira de fazer com que o Visual Studio sempre execute seu comando msitran imediatamente após a compilação do MSI, ou (b) apenas executar seu MSitran manualmente (de um arquivo em lote ou outros) após a construção, mas antes de testar.

Outras dicas

Encontrei uma maneira mais automatizada de fazer isso.

Crie um script nomeado add_reinstall_prop.vbs(Exemplo) com o Following:

set objArgs = WScript.Arguments
set o_installer = CreateObject("WindowsInstaller.Installer")
set o_database = o_Installer.OpenDatabase(objArgs(0), 1)
s_SQL = "INSERT INTO Property (Property, Value) Values( 'REINSTALLMODE', 'amus')"
set o_MSIView = o_DataBase.OpenView( s_SQL)
o_MSIView.Execute
o_DataBase.Commit

Adicione um evento pós-construção ao seu projeto de configuração, chamando o script com o seguinte:

add_reinstall_prop.vbs $(BuiltOuputPath)

Isso adicionará automaticamente a entrada desejada ao MSI construído. Você pode verificá -lo com o ORCA para ver que a entrada agora é adicionada automaticamente após a construção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top