我正在试图弄清楚如何发布我写的应用程序。我们没有在课堂上发表,我的编程老师也有一些健康问题,现在还没有。
我找到了“发布”选项,并且可以让它创建一个带有安装程序的文件夹...但我打开它,它只是打开程序,然后无限地发送垃圾邮件,抱怨我的Access数据库(位于在bin>构建阶段的调试中)无法访问(从我不认识的一些奇怪的路径)。我尝试使用WiX,但是当我尝试安装时它给了我一个错误,说它无法访问安装文件夹(以管理员身份运行)。我一直在谷歌搜索几个小时,戳它,探索,我不会走得太远。任何人都可以ELI5吗?
答案 0 :(得分:3)
当您对桌面应用程序使用“发布”选项时,VS会创建一次性单击安装程序,将所有知道的文件放在适当的位置。
不幸的是,它无法猜测您的应用程序需要哪些其他文件,因此您需要明确告诉它。
如果右键单击Project-> Properties,请转到Publish选项卡并单击“Application Files”按钮,您将看到将添加到安装程序的所有文件。
接下来,点击底部的“显示所有文件”。找到您的数据库,并将发布状态更改为“数据文件”。
请注意,我之前只使用过Click Once安装程序来安装从未修改过的静态文件(如图像/文档),仅在以后的版本中替换。我不确定你的(修改过的)数据库是否会在更新期间保留,但我怀疑不会。
如果Click Once安装过程太简单,无法满足您的需求,VS2010具有“安装项目”,可创建支持逻辑/代码的更复杂的安装程序。对于VS2012,通常建议的选项是Wix。不幸的是,它有一个陡峭的学习曲线,但它可以做你需要的任何东西。
我相信VS2013及更高版本已通过扩展程序重新设置项目,但我自己没有尝试过。
修改强>
最简单的方法是根据应用程序的执行位置以编程方式设置连接字符串。
请注意,根据this answer,clickonce应用程序通常从用户配置文件目录的深处执行(也请阅读有关数据目录的answer below)。这是ClickOnce如何工作的副作用(它希望安装在用户保证具有写访问权限的地方)。
检查该文件夹中是否确实存在.mdb。如果没有,您需要调整安装程序或.mdb
的属性。假设它与可执行文件位于同一位置,您可以告诉应用程序在哪里找到它......
string dbPath = IO.Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"access.mdb");
string connectionString = String.Format(
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}",
dbPath);
我不确定为什么您认为安装程序添加的数据库文件位于C:\
下的目录中。您可能没有查看安装程序创建的文件。
为避免混淆,请尝试将名称从access.mdb
更改为其他内容(temp.mdb
?),然后构建安装程序,重命名为access.mdb
。现在,当您安装应用程序时,请确保您正在查看的文件现在称为temp.mdb
。如果没有,你正在查看错误的文件。
答案 1 :(得分:0)
此链接具有数据库连接的完整演示,并发布带有数据库的C#应用程序。该应用程序还在另一台计算机上运行。 How to Publish C# Application with access database