我使用VS2008在C#.net中创建了一个程序。
当用户安装程序时,我不知道它是在C:驱动器还是D:驱动器或其他地方。问题是我需要程序自动创建文件,然后在没有用户帮助的情况下检索这些文件。
我认为最简单的情况是将这些文件放在安装程序的目录中,以便该位置保持不变,这种策略可以减少用户意外删除文件的机会。
问题1:
当用户选择安装位置时,如何引用我的应用程序的安装目录?
问题2:
我是否应该这样做,或者我应该从一个完全不同的角度来看待它。
答案 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);
}