Come impostare una casella di controllo a “incontrollato” dalla riga di comando msiexec?

StackOverflow https://stackoverflow.com/questions/2992006

  •  24-10-2019
  •  | 
  •  

Domanda

Ho un MSI (scritto con WiX), che dispone di una casella di controllo legato a una proprietà personalizzata (chiamarlo MY_PROPERTY). Vorrei eseguire questo msi dalla riga di comando, specificando 0 (incontrollato) o 1 (controllato) per questa proprietà. Il mio script determinerà il valore appropriato (in base all'ambiente) e iniettare il valore nella riga di comando msiexec. La mia linea di comando simile a questa:

msiexec /i my_installer.msi MY_PROPERTY=$value

Dove $ valore è 1 o 0, a seconda dell'ambiente. Il problema è che non importa quale valore fornisco per MY_PROPERTY nella riga di comando, la casella di controllo è sempre controllato (e la proprietà sarà sempre impostato a 1). L'unico modo per rendere la casella di controllo non selezionata è quella di non specificare la proprietà (lasciarlo indefinito). Va notato che questo comportamento si verifica indipendentemente dal fatto che l'interfaccia utente sta mostrando (aggiungendo "/ quiet" alla riga di comando di cui sopra non modificare questo comportamento).

Questo post MSDN sembra indicare che si tratta di un noto "bug" nel programma di installazione di Windows (o, più precisamente, qualunque sia il sistema di authoring ha scritto il msi). Un msi mod post-generazione si propone come la soluzione. Mi chiedo se qualcuno ha riscontrato questo problema e trovare una migliore soluzione / soluzione. Grazie!

Aggiorna

Vedo tre soluzioni a questo problema:

  1. Da @Damien, hanno lo script wrapper non passa la proprietà a msiexec quando il suo valore è 0. In questo modo lo script più complessa e probabilmente mi impedisce di essere in grado di sostituire il valore di una casella di controllo che il default è "controllati ".
  2. Da @ Michael Urman, aggiungere un'azione personalizzata che cancella la proprietà se il suo valore è pari a zero. Questo rende l'MSI più complessa, e che avrei dovuto aggiungere una tale azione personalizzata ogni casella di controllo nell'interfaccia utente per.
  3. Un'altra idea è quella di non consentire semplicemente l'uso di caselle di controllo nei nostri installatori MSI e scatole uso radio o elenchi a discesa per le domande "vero / falso", invece. Mentre questo limita le opzioni di interfaccia utente per i nostri installatori, merion permettono agli script wrapper di rimanere semplice, e non richiede azioni personalizzate di "hack" le proprietà.

Al momento sto appoggiato verso l'opzione 3, anche se l'opzione 1 è probabilmente la migliore risposta alla mia domanda iniziale. Ogni pensiero?

È stato utile?

Soluzione

Questo è come è "suppone" per il lavoro - in fondo, la proprietà non esiste finché un utente controlla la casella di controllo, allora è "set" (esiste). Quindi, se si vuole fare un'azione personalizzata quando una casella è selezionata, si prova per l'esistenza della proprietà come condizione per l'esecuzione l'azione personalizzata, invece di controllare per il valore che l'elica personalizzato è impostato.

Penso che il modo migliore per gestire questo dalla riga di comando è quello che hai già detto: se si desidera che la casella di controllo da selezionare, specifiy il puntello personalizzato sulla riga di comando, in caso contrario, non e la casella di controllo non sarà essere selezionato.

Altri suggerimenti

Come hai scoperto, caselle di controllo sono vere (selezionata) quando la proprietà è definita (non vuota) e falso (incontrollato), quando la proprietà non è definito (in bianco). Suona come è necessario convertire un ambiente 1 o 0 stringa in una casella di controllo vero / falso, dove il 1 o 0 viene passato in gioco dalla linea di comando. Provare a utilizzare un'azione personalizzata set-proprietà che consente di impostare la proprietà per {} (in bianco) con una condizione di quando la proprietà è già "0". Programmarlo in anticipo sia nel Installa interfaccia utente e installa eseguire sequenze.

Fine Aggiornamento: Per quanto riguarda la necessità di molteplici azioni personalizzate per gestire questo per più caselle di controllo, avete una scelta. Si sia possibile creare più azioni set-proprietà (vantaggio: facile dire quello che stanno facendo; costo: molti di loro), oppure è possibile creare una singola azione personalizzato basato su codice che cammina la tavolo Checkbox per un elenco delle proprietà di convertire da 0 a vuoto (vantaggio: un'azione; costo: poco documentato, codice personalizzato). Un vantaggio secondario di quest'ultimo approccio è che è possibile gestire le impostazioni Value inusuali, una casella di controllo in modo tale che dovrebbe impostare la proprietà su 0 quando selezionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top