5

デフォルト値がローカルである USERNAME の引数をユーザーが渡したかどうかを確認したい。値がローカルの場合にメッセージが表示されるかどうかを確認しようとしています。問題は次の方法です。これはうまくいきません。

<Property Id="USERNAME" Value="local"/>
<?define uName = [USERNAME]?>

<?if $(var.uName) = local ?>
      <Condition Message="$(var.uName)">0</Condition>
<?endif?>

しかし、コードを次のように変更すると、メッセージが表示されます。

<?define uName = local?>

<?if $(var.uName) = local ?>
      <Condition Message="$(var.uName)">0</Condition>
<?endif?>

uName次のコードは、USERNAME プロパティの値を変数に割り当てます。

<Property Id="USERNAME" Value="local"/>
<?define uName = [USERNAME]?>
<Condition Message="$(var.uName)">0</Condition>

上記のコードは、メッセージ ボックスに「local」を出力します。

多くのシナリオを試し、問題の場所を突き止めることができました。として割り当てられている変数値を比較する場合、

<?define uName = [USERNAME]?>

値は uName に割り当てられていますが、比較を行うことはできません。私はここで何か悪いことをしていますか? または、この種の問題の別の方法はありますか?

4

1 に答える 1

14

変数なしでこのようにできますか?

<Property Id="USERNAME" Value="local"/>

<Condition Message="The username is local, please enter a username for the installation to proceed">USERNAME = "local"</Condition>

ユーザーがユーザー名を入力した場合はこれで問題ありませんが、インストールは続行されますが、ユーザーが入力しなかった場合はデフォルトがローカルであるため失敗します。

ユーザー名の入力方法が気になります。これはコマンドライン経由ですか、それとも入力ダイアログからですか?

ダイアログからの場合 - インストールを中止するのではなく、エラー ダイアログを表示することをお勧めします。私は完全に間違っているかもしれませんが、選択肢を与えているだけです。

お役に立てれば...:)

編集:

必要なことを行うには、サービスを内部に持つコンポーネントに条件を追加するだけです。次の 2 つのコンポーネントがあります。

<Component Id="ServiceOne" Guid='*' Directory="Directory">
 //All your service tags etc 
  <Condition><![CDATA[USERNAME = "local"]]></Condition>
</Component>

<Component Id="ServiceTwo" Guid='*' Directory="Directory">
 //All your service tags etc 
  <Condition><![CDATA[USERNAME <> "local"]]></Condition>
</Component>
于 2013-03-15T11:27:32.507 に答える