【问题标题】:Attaching existing Database into the application during instllation: Setup Project在安装过程中将现有数据库附加到应用程序中:安装项目
【发布时间】:2017-03-22 06:31:46
【问题描述】:

我有一个在 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();
        }

【问题讨论】:

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


    【解决方案1】:

    这可能在 Visual Studio 自定义操作中不起作用的原因有多种。最常见的是自定义操作在每个人(每台机器)安装中使用系统帐户运行(因此它们被提升),并且数据库通常不允许访问系统帐户。另一个可能是数据库在网络上,但系统帐户没有网络访问权限。

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

    当用户第一次尝试使用应用程序(而不是从安装)时完成此操作可能会更好,特别是如果您已经有执行此操作的代码。然后它将在正常的用户上下文中运行,并且在失败时可以轻松重试,如果在安装过程中失败则可能不是这种情况。

    【讨论】:

    • 以上 SQL 连接代码来自应用程序 exe,但运行 SQL 脚本的所有逻辑都在安装程序类中。在您的最后一段中,您的意思是让安装程序类运行 ONBEFOREINSTALLATION()?但是现在我也在 Installer 类中添加了 SQL 连接代码。
    • Visual Studio 自定义操作都在所有文件安装后运行,因此“安装前”是对所发生情况的非常误导性的描述。此外,您没有说明连接到数据库返回的错误,但如果您收到有关用户不允许访问的错误,那么很可能是因为安装程序类代码在每个人安装中使用系统帐户运行,正如我所说.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2011-07-08
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多