2012-03-21 24 views
0

我需要在安裝過程中修改machine.config。我知道,我需要使用XMLConfig的組成部分,但仍不能一切都清楚了我:wix XmlConfig語法

  • 當我想通了,UTIL:XMLConfig的標籤應放置組件標籤內。組件標籤應放置在目錄標籤內。我是否應該創建帶有唯一ID的目錄定義標籤,以便與util:XmlConfig一起使用?你能提供一個非常簡單的例子,其中包含整個組件和目錄定義,我應該使用它來讓我明白這是如何工作的?

  • 我需要修改machine.config文件,路徑是這樣的:
    文件= 「[WindowsFolder] Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ machine.config中」。
    但是,提供這樣的路徑是一個好主意嗎?也許我應該自動獲得這個路徑(我的意思是.net框架版本號) - 這可能嗎?

  • 我需要在machine.config中添加條目DbProviderFactories。如果我想添加的條目已經存在於文件中,該怎麼辦?他們會再次添加,取而代之?如果他們將被添加兩次,我怎樣才能防止這種情況?

+1

您確定需要修改machine.config?您可以將您的DbProviderFactory設置放入您的web.config或app.config文件中......使用XmlConfig更容易完成此操作。 – Will 2012-03-21 11:44:34

+0

我需要修改machine.config當我在本地註冊提供程序時,appause會崩潰。 – user1209216 2012-03-21 13:00:55

回答

0

如果所有你需要的(因爲我猜)是利用實體框架,你不應該修改machine.config文件。這可能很危險,因爲您可能會無意中使其不一致。

相反,你可以做以下伎倆:

  1. 獲取配置數據,已經由CLR閱讀:

    var dataSet = ConfigurationManager.GetSection("system.data") as System.Data.DataSet; 
    
  2. 然後檢查第一臺和第三列在此表爲您的供應商的不變名稱:

    bool bFound = false; 
    foreach (DataRow row in dataSet.Tables[0].Rows) 
    { 
         if (row[2].ToString() == "EFOracleProvider") 
         { 
          bFound = true; 
          break; 
         } 
    } 
    // if this provider is not already listed in the table, then add it 
    // set oracle provider parameters 
    if (!bFound) 
    { 
         dataSet.Tables[0].Rows.Add(
           provName, 
           provDesc, 
           provInvariant, 
           provAssembly 
         ); 
    } 
    

當然,你應該這樣做之前首先創建ObjectContext。

+0

由於某種原因,它僅在全局註冊連接器時纔有效。如果我在代碼或app.config中註冊,總是應用程序崩潰。這可能與資源中的wpf數據綁定有關,我不知道如何解決這個問題(並沒有時間弄清楚)。所以我決定全局註冊連接器 - 我試圖手動編輯machine.config,它工作。 – user1209216 2012-03-21 12:50:04