2012-07-25 52 views
0

我試圖在C#.Net中開發一個工具(使用Windows窗體)。我有一個MSI文件和一個MST(轉換文件)已經生成。我必須先讀取msi文件(使用表單menustrip菜單項作爲用戶的輸入),然後讀取mst文件(與msi作爲輸入的方式相同)。接下來,通過複製輸入的msi創建一個臨時msi(可能位於臨時位置)並將轉換應用於該臨時msi。然後,我可以按照我的要求查詢msi表(與mst合併)。我正在使用Visual Studio 2010專業版。這裏是我用Windows安裝程序參考庫寫入我的知識的一段代碼。如何使用c#代碼將變換mst應用於msi?

 using System; 
     using System.ComponentModel; 
     using System.Windows.Forms; 
     using WindowsInstaller; 
     using System.Xml; 
     using System.IO; 

     //// Create an Installer instance 
     Type classType = Type.GetTypeFromProgID("WindowsInstaller.Installer"); 
     Object installerObj = Activator.CreateInstance(classType); 
     Installer installer = installerObj as Installer; 
     Database database = Installer.OpenDatabase(File_MSI,MsiOpenDatabaseMode. 
     msiOpenDatabaseModeTransact); 
      database.ApplyTransform (File_MST, MsiTransformError.msiTransformErrorViewTransform); 
      WindowsInstaller.View viewmst = null; 
      string sqlquerymst = string.Format("Select * FROM _TransformView"); 
      viewmst = database.OpenView(sqlquerymst); 
      viewmst.Execute(null); 
      database.Commit(); 
      viewmst.Close(); 
      string sql = String.Format("Select Property,Value FROM Property"); 
      WindowsInstaller.View view = database.OpenView(sql); 
      view.Execute(null); 

回答

1

雖然目前還不清楚你與面對的問題,我對你有一些一般性的建議:構建您的MSI軟件包(一個或多個)

  • 即使你不使用WiX toolset,您可以利用.NET API來處理稱爲DTF的MSI包。您可以在與WiX工具集一起安裝的DTF.chm文件中找到更多信息。例如,請看Database課程及其ApplyTransform()方法
  • 您描述的場景聽起來有點棘手,我懷疑它可以被簡化。如果您將轉換應用於MSI包以讀取該轉換帶來的內容,那麼在構建此轉換時可能更容易在較早的步驟中獲取這些數據,並避免查詢MSI數據庫,這不是最重要的事情。當然,這是指你自己生成轉換的情況,它不是第三方的東西

希望這可以幫助你以任何方式。