我如何参考安装.net程序的目录?

时间:2009-08-12 02:25:52

标签: c# .net

我使用VS2008在C#.net中创建了一个程序。

当用户安装程序时,我不知道它是在C:驱动器还是D:驱动器或其他地方。问题是我需要程序自动创建文件,然后在没有用户帮助的情况下检索这些文件。

我认为最简单的情况是将这些文件放在安装程序的目录中,以便该位置保持不变,这种策略可以减少用户意外删除文件的机会。

问题1:

当用户选择安装位置时,如何引用我的应用程序的安装目录?

问题2:

我是否应该这样做,或者我应该从一个完全不同的角度来看待它。

5 个答案:

答案 0 :(得分:3)

Assembly.GetExecutingAssembly()。Location将为您提供当前正在执行的程序集的路径。

但是,写入该位置将导致在Vista,Server 2008及更高版本上运行的用户出现问题,这些用户对于不写入C:\ Program Files等地方的普通用户更为严格。你最好的选择可能是:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

根据您想要存储的内容,Environment.SpecialFolder有很多选项。

答案 1 :(得分:1)

听起来像.Net(System.IO.IsolatedStorage)中隔离存储功能的完美解决方案。

您可以通过对象访问,路径由.Net控制。它将项目存储在每个登录的本地settings \ application data \ isolated存储中。

答案 2 :(得分:0)

您可以使用System.Environment.CurrentDirectory属性来确定您的应用程序所属的位置。

或者,您可以查看隔离存储。数据存储在用户/计算机上(如您所选),因此您可以为不同的用户存储不同的文件。

您选择的内容取决于您要存储的信息量以及周围的安全性。

答案 3 :(得分:0)

您可以使用以下方式获取当前目录:

string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

这是存储与.exe相关的文件的有效且有用的方法 - 您始终可以使用运行可执行文件的相对目录进行导航,这意味着您无需担心它的安装位置。

或者,如果您希望您的.exe可以自由复制到任何目录,您可以考虑将数据存储在一个众所周知的位置,例如用户配置文件中的用户应用程序设置目录(对于Windows)。

答案 4 :(得分:0)

Application.StartupPath应该为您执行此操作:

private static string GetApplicationPath()
{
    return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
}

How to get the path of app(without app.exe)?