2013-10-02 70 views
0

我有一個C#應用程序。我需要將我的數據庫文件從CD複製到目標文件夾,然後將其用於登錄和其他目的。 爲此,我編寫了一個安裝程序類,如下所示。安裝程序類與安裝項目在C#

public partial class Installer1 : Installer 
{ 
    public Installer1() 
    { 
     InitializeComponent(); 
     Copy_our_Files(); 
    } 

    private void Copy_our_Files() 
    { 
     System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); 
     var d = ""; 

     foreach (System.IO.DriveInfo drive in drives) 
     { 
      if (drive.DriveType == System.IO.DriveType.CDRom) 
      { 
       d = drive.Name; 
       break; 
      } 
     } 

     string addre = @"C:\Windows\\System32"; 
     System.IO.File.Copy(d + @"Database5.accdb", addre + "\\Database5.accdb"); 
    } 
} 

但安裝我的應用程序在數據庫文件不會被複制到中提到的位置是c:\Windwos\System32文件夾。

+0

你有什麼錯誤嗎?還有一些假設/問題此代碼使/有... – Charleh

+0

我得到的錯誤是'無法創建project1.installer1安裝程序類型的實例 - 異常已被引發的目標引發 - 此設備還沒有準備好' –

+0

它最終在'C:\ Windows \ SysWow64'中取而代之嗎?爲什麼你把任何東西放進系統目錄? –

回答

0

可能發生的事情是它的失敗,但安裝人員並沒有公開清楚爲什麼他們失敗了。

檢查事件日誌中的例外情況。如果做不到這一點,你需要堅持自己的方式來發現答案。

使用EventLog對象寫出進度等是d + @"Database5.accdb"有效的路徑。

我也建議使用其中一個覆蓋等或一個適合您的需求。我不能說在安裝程序在InitializeComponent之後的什麼時候。

protected override void OnCommitted(IDictionary savedState) 
{  
     //Your code 
     base.OnCommitted(savedState) 
} 
+0

我得到的錯誤是'無法創建project1的實例。installer1安裝程序類型 - 調用目標引發異常 - 此設備未準備好' –

+0

檢查是否可以逐步診斷問題。檢查它是否進入Copy_our_Files。檢查目標和源是否存在。這種異常聽起來像CD光盤不可用。 – Jonathan

3

您需要在安裝程序中執行此操作。你說你正在安裝你的應用程序文件。您正在使用的任何安裝程序軟件的實例必須複製該數據庫文件。複製額外的文件應該在您的安裝軟件中實現。

您當前的黑客很酥,將在許多現實世界的情況下失敗:

  • ,如果我沒有什麼CD ROM驅動器?從USB棒或我的同事電腦CR ROM驅動器安裝是不可能的。

  • 如果我有多個CD ROM驅動器,該怎麼辦?

  • 如果我的Windows沒有安裝在C:\ Windows中,該怎麼辦?

  • 如果我沒有寫入我的System32目錄的可執行文件,該怎麼辦?你爲什麼甚至想寫在那裏?

結論:您的問題已被安裝程序軟件解決。您已經在「安裝」,因此我假設您已經在使用安裝程序軟件。讓它做它爲之建立的東西,不要試圖模仿它自己。

相關問題