使用.NET winforms应用程序安装MYSQL

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

任何帮助将不胜感激。

第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。

所以考虑到这一点,我想说你最好的办法是设置一个xcopyable mysql

这个问题与另一个问题非常相似。 但是,答案并没有真正帮助。

您可以从.Net部署项目中的自定义操作运行可执行文件 ,这就是我建议的。 (请在“将可执行文件调用为自定义操作”标题下查找)

希望通过命令行可以处理所有事情。 如果没有,尝试像Wise或InstallShield这样的脚本安装程序,我认为他们可以更好地支持这样的东西。

希望有所帮助!

如果您正在使用或可以使用NSIS,您应该阅读: 无声MySQL安装

关于还原,您可以使用MySQL包含的utils之一编写脚本或修改此旧NSIS脚本的一部分

祝好运!

@Orion Edwards

非常感谢您的步骤。 我对SAME有疑问。 实际上,我们只是将SQLite关闭了,因为我们的独立应用程序需要一些程序和外键约束。但现在我觉得如果将SQLite部署在客户端计算机上,SQLite始终是独立桌面应用程序的更好选择。

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

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

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

将来我想我会坚持使用SQLite ! 😛

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