【问题标题】:How to get root path for winforms如何获取winforms的根路径
【发布时间】:2011-11-16 18:36:31
【问题描述】:

我正在使用 bin/debug 文件夹中的 access db,并在类似代码中使用它

    private static string **_strCon** = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
***Application.ExecutablePath.ToString().Substring(0, 
Application.ExecutablePath.ToString().LastIndexOf('\\')) +
 "\\Reporting.accdb***;Jet 

OLEDB:Database Password=abc;";

对于报告,我使用 DataSet,它使用 app.config 中的连接字符串,例如

    <add name="GarzaReportingSystem.Properties.Settings.ReportingConnectionString" 

connectionString="Provider=Microsoft.ACE.OLEDB.12.0;***Data Source=|DataDirectory|\bin

\Debug\Reporting.accdb***;Persist Security Info=True;Jet OLEDB:Database Password=abc" providerName="System.Data.OleDb"/>

问题:

当我设置项目并安装应用程序时。我需要将 Reporting.accdb 放在根文件夹中,以便我的表单使用 _strCon 工作。换句话说,我的可执行文件路径成为根文件夹

但对于数据集

我需要将 access db 放在 bin/debug 文件夹中,以便在安装应用程序时它可以工作。

如何解决这个问题,使两者都解决相同的路径,如 root 有文件夹 DataBase 并且都使用该路径。

【问题讨论】:

  • 在创建安装文件时在“应用程序文件夹”中添加 .accdb 文件
  • @deepi ,这意味着我需要在进行设置时始终将 app.config 路径更改为 root ? .因为当我准备设置时 app.config 路径不起作用。

标签: .net winforms


【解决方案1】:

您不应在安装目录中部署数据库:C:\Program Files 和子目录中的写入权限需要管理员权限。您最好将其复制到ProgramData 下的目录中。

更好的是,如果您希望不同的 Windows 用户拥有自己的 DB 副本:当您的程序启动时,它应该在当前用户的 AppData 文件夹中查找 DB 的副本。如果没有可用的副本,您的程序应首先将文件从\Program Files\blah\ 复制到用户的AppData

Answers to this question 显示如何检索 AppData 路径。

【讨论】:

  • 如何为 AppData 实现这一点。你有代码要分享吗?
【解决方案2】:

您不应该对任何 bin/debug 进行硬编码,因为在部署中您将让应用程序从任何其他安装路径运行,要获取 exe 的目录路径,请执行以下操作:

var executingFolder = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

然后是这样的:

var dbPath = System.IO.Path.Combine(executingFolder, "data\MyDbName.mdb");

如果您将 MyDbName.mdb 文件包含在项目中名为 data 的文件夹中,那么您可以先在 Visual Studio 中设置,然后在安装程序中设置这样的 data 子文件夹将始终部署在 bin/debug 下调试或最终的应用程序安装文件夹。

【讨论】:

    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2016-10-21
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多