2013-10-02 69 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目录的可执行文件,该怎么办?你为什么甚至想写在那里?

结论:您的问题已被安装程序软件解决。您已经在“安装”,因此我假设您已经在使用安装程序软件。让它做它为之建立的东西,不要试图模仿它自己。

相关问题