如何获取winforms的根路径

时间:2011-09-14 07:16:55

标签: .net winforms

我正在使用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中的connectionstring,如

    <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工作。换句话说,我的可执行路径成为根文件夹

但对于DataSet

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

如何解决此问题,以便像root一样解析相同路径的文件夹DataBase,并且都使用该路径。

2 个答案:

答案 0 :(得分: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下在调试或最终的应用程序安装文件夹中。

答案 1 :(得分:2)

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

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

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