在安装期间将现有数据库附加到应用程序中:安装项目

时间:2017-03-22 06:31:47

标签: mysql visual-studio-2013 installer custom-action setup-deployment

我在Visual Studio 2013中运行了一个C#windows应用程序,我已使用设置和部署创建了一个安装程序。对于这个应用程序,我使用MySQL数据库作为一个单独的实体,它具有表创建脚本,存储过程和数据库批处理文件来运行所有脚本。

但是现在我需要将此数据库候选者发送到安装程序中。 尝试了一些选项,比如在提交后在自定义操作中运行数据库批处理文件,这样做不顺利。如果我不想使用批处理文件执行方法(因为在安装结束时没有任何执行批处理文件的选项对我有效)如何在提交时将这个现有数据库附加到我的安装项目?

我正在处理从appconfig获取连接字符串的应用程序代码中的连接。

<connectionStrings>
    <add name="CRSDatabaseString" connectionString="Server=localhost; Database=Tel_CRS; Uid=root; Pwd=root123; Persistsecurityinfo=True;" />
    <add name="CSSDatabaseString" connectionString="Server=localhost; Database=Tel_css; Uid=root; Pwd=root123; Persistsecurityinfo=True;" />
  </connectionStrings>

应用程序代码中的SQL连接如下:

public  MySQL_Connection()
        {
                         String conn ="";
            if (Bootstrapper.InspectionTarget=="css")
                 conn = ConfigurationManager.ConnectionStrings["CSSDatabaseString"].ConnectionString;
            else
                conn = ConfigurationManager.ConnectionStrings["CRSDatabaseString"].ConnectionString;


            Db_conn = new MySqlConnection(conn);
            Db_conn.Open();
        }

1 个答案:

答案 0 :(得分:0)

有几个原因可能导致Visual Studio自定义操作无效。最常见的是自定义操作在Everyone(每台计算机)安装中与系统帐户一起运行(以便它们被提升),并且数据库通常不允许访问系统帐户。另一个可能是数据库在网络上,但系统帐户没有网络访问权限。

目前尚不清楚您的代码是从可执行文件还是安装程序类Dll运行,但无论哪种方式代码都不在代表交互式用户从Windows shell运行的相同上下文中运行:没有默认的工作目录(您从msiexec.exe进程运行);对用户配置文件位置的访问将失败(例如,系统帐户没有桌面文件夹),并且在安装程序类Dll中,配置/设置文件以通常的方式不可用,因为安装程序类是使用反射实例化的,而不是通常的装配方式。换句话说,仅仅因为代码在作为交互式用户进行测试时运行并不意味着它在使用系统帐户运行并从msiexec.exe进程运行时将起作用。

当用户第一次尝试使用应用程序(而不是来自安装)时,最好完成此操作,特别是如果您已经有代码执行此操作。然后它将在普通用户上下文中运行,并且如果失败则可以轻松地重试,如果在安装期间失败则可能不会这样。

相关问题