.net 如何获取winforms的根路径

.net 如何获取winforms的根路径,.net,winforms,.net,Winforms,我正在使用位于bin/debug文件夹中的accessdb,并在如下代码中使用它 private static string **_strCon** = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ***Application.ExecutablePath.ToString().Substring(0, Application.ExecutablePath.ToString().LastIndexOf('\\')) + "\

我正在使用位于bin/debug文件夹中的accessdb,并在如下代码中使用它

    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放在根文件夹中,以便我的表单使用\u strCon工作。换句话说,我的可执行路径成为根文件夹

但对于数据集

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


如何解决此问题,以便两者都解决相同的路径,就像root has folder DataBase一样,并且都使用该路径。

您不应该硬编码任何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中设置,然后在安装程序中设置,这样的数据子文件夹将始终部署在调试中的bin/debug下或最终的应用程序安装文件夹中。

不应在安装目录中部署DB:Write访问C:\程序文件和子目录需要管理员权限。您最好将其复制到ProgramData下的目录中

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


显示如何检索AppData路径。

在“应用程序文件夹”@deepi中创建安装文件add.accdb文件时,这意味着我需要在进行安装时始终将app.config path更改为root。因为在准备安装程序时app.config路径不起作用。我如何为AppData实现这一点。你有什么代码可以分享吗?