2013-03-15 13 views
4

我想檢查用戶是否已經傳遞了USERNAME的參數,默認值是本地的。如果值是本地的,我想看看我是否收到了一條消息。問題在於以下方式。這不起作用。使用條件來比較WiX中的變量值

<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?> 

而下面的代碼將USERNAME屬性的值分配給uName變量。

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

上述代碼在消息框中打印「本地」。

我嘗試了很多場景,可以找到問題所在。當比較變量值時,它被分配爲:

<?define uName = [USERNAME]?> 

儘管該值已分配給uName,但我們無法進行比較。我在這裏做錯了什麼?或者有這種問題的另一種方式?

回答

12

你可以這樣做嗎沒有變量?

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

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

如果用戶輸入的用戶名,然後安裝將繼續進行,但如果用戶沒有那麼作爲默認的是本地的,它會失敗這將是正確的。

我不知道如何輸入用戶名。這是通過命令行還是從輸入對話框?

如果從對話框 - 我會建議有一個錯誤對話框,而不是中止安裝。我可能完全錯誤,但只是給你選擇。

希望這有助於... :)

編輯:

做你想要什麼,只需添加一個條件,你的組件,它內部有您服務。有兩個組成部分:

<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> 
+0

嗨娜塔莉,感謝您的想法,但我想的是,如果用戶輸入用戶名的值(命令行)應該安裝在一個自定義帳戶的服務,如果沒有服務應該安裝在本地系統中。我想篩選用戶是否提及了USERNAME,以正確的帳戶安裝服務 – 2013-03-15 11:37:13

+0

我用樣本更新了我的答案 – 2013-03-15 11:59:36