【问题标题】:MYSQL installation with a .NET winforms app使用 .NET winforms 应用程序安装 MYSQL
【发布时间】:2008-12-18 03:52:12
【问题描述】:

我有一个使用 MYSQL 的 C# 应用程序。我处于测试版发布点,需要一个包含我的应用程序以及 MYSQL 的安装包。所以基本上,我需要安装 MYSQL 并从我的 .NET 安装包中执行恢复。

任何帮助将不胜感激。

【问题讨论】:

标签: c# .net mysql installation


【解决方案1】:

第 1 步:你做错了

您正在尝试安装 mysql 服务器。这应该是您发现有问题的第一个线索。大多数服务器应用程序设计为安装在服务器上,而不是客户端上。值得注意的一点是服务器应用程序喜欢假设他们“拥有”服务器。这对客户端应用程序来说是一个巨大的禁忌。

第 2 步:在我们得到适当通知后做出决定

既然我们已经确定我们做错了,我们需要选择要做什么。我们有两个选择:

  1. 从 MySQL 切换到“客户端”数据库,例如 SQLite 或 SQL Server Compact Edition。
  2. 解决安装服务器应用程序的问题。

我个人建议尽快切换到 SQLite(或类似的)。这是“正确的事情”,您不必在未来几年内维护黑客。

第 3 步:无论如何你都想破解 MySQL,因为它可能看起来更容易。

您已被警告。以下是您需要注意和缓解的一些事项:

  1. MySQL 想要安装到程序文件\mysql。如果用户自己已经安装了 MySQL。你会破坏一切
    • 您需要告知您的 MySQL 版本以安装到自定义文件夹中。我建议将其作为您应用程序的子文件夹
  2. MySQL 希望作为服务运行(并且该服务可能会被称为“mysql”)。同样,如果用户已经拥有 mysql,您将破坏一切。
    • 您需要以不同的名称运行您的服务
  3. MySQL 服务器可能希望将文件写入 Program Files\etc。
    • 您需要更改它的配置,以便写入 %APPDATA% 等等
  4. MySQL 将假定它始终由同一用户运行。如果你的机器上有 2 个用户想要使用你的程序,你需要相应地破解,要么将 MySQL 作为本地服务帐户运行(安全漏洞啊),要么为每个用户安装单独的 mysql。李>

考虑到这一切,我想说你最好的选择是set up an xcopyable mysql

【讨论】:

    【解决方案2】:

    我已将答案发布到另一个question

    我们对此采取了不同的方法。我们通过在调用 MySQL 之前编写一个包装器来生成配置文件(以正确设置基本路径等),使 MySQL 可以进行 xcopy。然后我们使用标准设置安装了另一个服务。该服务将负责为我们启动 MySQL 和其他所需的后台程序(在我们的例子中为 Apache)。由于 MySQL 是由我们部署的,因此我们希望完全控制它。

    因此,使用这种方法,您可以简单地将 MySQL 包与您的安装一起包含在内,而只需担心安装您自己的服务。

    【讨论】:

      【解决方案3】:

      这个问题与another question 非常相似。然而,答案并没有真正的帮助。

      你可以run executables from a custom action in the .Net deployment project,这是我推荐的。 (查看标题“将可执行文件作为自定义操作调用”)

      希望一切都可以通过命令行处理。如果没有,请尝试使用 Wise 或 InstallShield 之类的脚本安装程序,我认为他们对此类内容有更好的支持。

      希望有帮助!

      【讨论】:

        【解决方案4】:

        如果您正在使用或可以使用 NSIS,您应该阅读以下内容:Silent MySQL Install

        关于恢复,您也许可以使用 MySQL 包含的工具之一编写脚本,或者修改这个旧的 NSIS script 的一部分

        祝你好运!

        【讨论】:

          【解决方案5】:

          @Orion Edwards

          非常感谢您的步骤。我也有同样的疑问。事实上,我们只是拒绝了 SQLite,因为我们的独立应用程序需要一些过程和外键约束。但现在我觉得如果将 SQLite 部署在客户端计算机上,它总是作为独立桌面应用程序的更好选择。

          现在,我必须坚持使用 MySQL。所以我使用不同类型的脚本和机制来处理不同的可能情况。例如:

          • 如果客户端机器没有预装mysql,有一个脚本可以完全安装服务器并创建数据库,我的应用程序需要用户。
          • 如果客户端机器上预装了 mysql,我会询问用户 mysql 的 root 用户名和密码,并在应用程序中设置数据库和用户。
          • 第三,如果由于某种原因客户端机器之前有mysql服务器然后被卸载,因为mysql即使在卸载后也会跟踪以前的root密码,我运行mysql服务器的.msi,重置密码(手动执行一些步骤),最后在脚本中创建数据库实例(当然这些步骤需要由美国执行,而不是用户执行,因为这种情况非常罕见。)

          这种方法可以吗?或者有更好、更合适的方法来做到这一点?

          以后我想我会坚持SQLite! :-p

          【讨论】:

            【解决方案6】:

            看看使用 Visual Studio 的打包和部署工具。如果您本地连接(MySQL .NET 组件)而不是 ODBC 连接,它应该会自动引入 MySQL 依赖项。在任何情况下,它都允许您将其他软件添加到安装程序中,如果您需要它可以自动解包。我已经使用它来部署 C# 应用程序,使用您从 MySQL 网站下载的 MySQL 库和 CoreLab 的 MySQL 3rd 方库。

            【讨论】:

            • 这很适合安装客户端库,我怀疑已经完成了。问题是尝试安装 mysql server
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-10
            • 2023-02-25
            • 1970-01-01
            相关资源
            最近更新 更多