1

我有 ac# 应用程序。我需要将我的数据库文件从 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文件夹。

4

2 回答 2

4

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

您当前的 hack 非常不稳定,在许多现实世界的场景中都会失败:

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

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

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

  • 如果我的 System32 目录没有写入权限怎么办?为什么你甚至想写在那里?

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

于 2013-10-02T14:52:43.073 回答
0

可能发生的事情是它失败了,但安装人员并没有明确说明他们失败的原因。

检查事件日志是否有异常。如果做不到这一点,您将需要坚持自己的方式来发现答案。

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

我还建议使用其中一种替代等或适合您需要的一种。我不能说安装程序在什么时候InitializeComponent

protected override void OnCommitted(IDictionary savedState)
{     
      //Your code
      base.OnCommitted(savedState)
}
于 2013-10-02T14:37:16.387 回答