安装程序类,包含c#中的安装项目

时间:2013-10-02 14:28:32

标签: c#

我有一个c#应用程序。我需要将我的数据库文件从CD复制到目标文件夹,然后将其用于登录和其他目的。 为此,我编写了一个安装程序类,如下所示。

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文件夹中提到的位置。

2 个答案:

答案 0 :(得分:3)

您需要在安装程序中执行此操作。您说您正在安装您的应用程序文件。您使用的任何安装程序软件的实例都必须复制该数据库文件。复制其他文件应该在您的安装软件中实现。

您当前的黑客攻击非常脆弱,在许多现实场景中都会失败:

  • 如果我没有CD ROM驱动器怎么办?从USB记忆棒或我的同事计算机CR ROM驱动器安装是不可能的。

  • 如果我有多个CD ROM驱动器怎么办?

  • 如果我在C:\ Windows中没有安装Windows,该怎么办?

  • 如果我没有写入System32目录,该怎么办?你为什么要写那里?

结论:安装程序软件已解决您的问题。您已经“安装”了,所以我假设您已经在使用安装程序软件。让它做它的构建,不要试图自己模仿它。

答案 1 :(得分:0)

可能发生的事情是它的失败,但安装人员并不明白为什么他们失败了。

检查事件日志中的异常。如果做不到这一点,你需要断言你的方法来揭示答案。

使用EventLog对象写出进度等d + @"Database5.accdb"有效路径。

我还建议使用其中一个覆盖等或一个适合您的需求。我无法说明安装程序在InitializeComponent之后的什么时候。

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