Pergunta

O cenário é que temos um aplicativo cliente / servidor com o cliente instalar sendo um bootstrapper usando Inno Setup que os downloads do cliente a partir do servidor especificado pelo número de IP / Porta. Nós gostaríamos de ser capaz de detectar se existe um servidor na rede local via transmissão UDP, e pode escrever um aplicativo de console que faz isso. O problema é, como é que vamos passar a informação a partir do aplicativo de console para o instalador?

Eu posso capturar o código de retorno, mas que só pode ser um int. Tanto quanto eu posso dizer, as únicas funções para ler arquivo em Inno Setup é o pré-processador de modo que não pode ler um arquivo criado em tempo de execução pelo aplicativo console. A única coisa que posso pensar é retornar um int onde os 4 primeiros dígitos são a posição do' do e:. Antes do porto e, em seguida, analisar o valor, que parece hackish, frágil e propenso a erros, especialmente considerando Eu não estou intimamente familiarizado com Inno Setup sintaxe / funções para a construção de uma string.

Todas as sugestões?

Foi útil?

Solução

Não sabe como carregar um parâmetro da linha de comando, mas você pode usar LoadStringFromFile para carregar o conteúdo de um arquivo ou GetIniString para ler um parâmetro de um arquivo ini.

De modo mais geral, olhar para "Funções de Suporte de referência" no arquivo de configuração Ajuda Inno. Esta página vai lhe dar uma lista de todas as funções Inno (não incluindo o pré-processador). Se você não consegue encontrar esta página (se você só encontra informações sobre o pré-processador), então você pode estar olhando no helpfile errado. Observe que a tabela Inno Setup Ajuda de conteúdo não é tudo o que ótimo, mas o índice é muito bom.

parâmetros de linha de comando são documentados na página "Configuração do Command Line Parameters". É possível que você pode ser capaz de enganar Inno usando um dos parâmetros existentes, mas usando um arquivo ini parece que seria a abordagem mais simples.

Outras dicas

Se você quiser analisar argumentos de linha de comando a partir do código em Inno Setup, em seguida, usar um método semelhante a este. Basta ligar para o instalador a partir da linha de comando da seguinte forma:

c:\MyInstallDirectory>MyInnoSetup.exe -myParam parameterValue

Em seguida, você pode chamar o GetCommandLineParam assim sempre que você precisar:

myVariable := GetCommandLineParam('-myParam');
{ ================================================================== }
{ Allows for standard command line parsing assuming a key/value organization }

function GetCommandlineParam (inParam: String):String; 
var 
  LoopVar : Integer; 
  BreakLoop : Boolean; 
begin 
  { Init the variable to known values } 
  LoopVar :=0; 
  Result := ''; 
  BreakLoop := False; 

  { Loop through the passed in array to find the parameter } 
  while ( (LoopVar < ParamCount) and 
      (not BreakLoop) ) do 
  begin 
    { Determine if the looked for parameter is the next value } 
    if ( (ParamStr(LoopVar) = inParam) and 
       ( (LoopVar+1) < ParamCount )) then 
    begin 
      { Set the return result equal to the next command line parameter } 
      Result := ParamStr(LoopVar+1); 

      { Break the loop } 
      BreakLoop := True; 
    end 

    { Increment the loop variable } 
    LoopVar := LoopVar + 1; 
  end; 
end; 

Espero que isso ajude ...

InnoSetup inclui uma interpretado Pascal-like linguagem de extensão que pode ser usada para um monte de coisas durante a execução do instalador.

Por exemplo, eu sei que ele pode ler o registro, e estou bastante certeza de que ele pode ler arquivos, pelo menos de algumas pastas. Seu app-modo console poderia escrever um arquivo temporário ou deixar cair uma ou mais chaves de registro contendo as informações necessárias no resto do instalador, e que podem ser devolvidos a partir do ambiente de script no script de instalação adequada. O instalador pode até limpar o arquivo temporário e / ou chaves mais tarde.

A partir do Inno Setup manual:

{param: ParamName | DefaultValue}

Embeds a command line parameter value.
    * ParamName specifies the name of the command line parameter to read from.
    * DefaultValue determines the string to embed if the specified command 
      line parameter does not exist, or its value could not be determined.

Exemplo:

[Configuração] AppId = ... AppName = {param: exe_name | xyz} .exe

Mais: www downloadatoz com / manual / in / inno-setup / topic_consts.htm

O acima resposta anônima deve ser upvoted.

Eu era capaz de passar um argumento para meu instalador por apenas referindo-se ao parâmetro pelo nome no script:

{param:filePath|abc}

E, em seguida, ao chamar o instalador passar o valor do parâmetro usando o formato exigido:

MyInnoSetup.exe /filePath=../foo.exe
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top