如何针对潜在的非正统硬盘驱动器字母进行防御编码
本文关键字:编码 硬盘驱动器 何针 非正统 | 更新日期: 2023-09-27 18:25:27
我可以将SaveFileDialog的InitialDirectory属性设置为我的应用程序通常安装的位置,如下所示:
saveFileDialog1.InitialDirectory = @"C:'Program Files'Waltons'Mountains";
但由于"每个人群中都有一个",有些人可能会使用C以外的驱动器号作为硬盘驱动器?如何将InitialDirectory设置为用户指定的驱动器号?
更新
我尝试了Alexei的代码(必须将"Concat"更改为"Combine"并删除多余的"):
saveFileDialog1.InitialDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), @"Waltons'Mountains");
DialogResult result = saveFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
// TODO: Finish
}
但它不会打开C:''Program Files''Waltons''Mountains
更新2
Saeb的建议似乎奏效了,因为保存文件对话框在C:''Waltons''Mountains''bin''Debug 中打开
我希望/估计它将对应于用户机器上的C:''Walton(或D:''Walton或Z:''Walton或其他)。
我想我必须为用户附加"''Mapses"-检查它是否没有在Visual Studio或其他地方运行,并在该事件中附加它。
普通用户可写的位置将是保存对话框的默认位置。即通过Environment.GetFolderPath
传递Environment.SpecialFolder值之一的"我的文档":
var pathToMyDocuments = Environment.GetFolderPath(Environment.SpecialFolder.Personal));
如果你需要你的程序默认安装的位置,比如程序文件
Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "MyFolder");
或者如果你需要相对于程序的路径检查我如何才能获得应用程序';的路径?。
请注意,除非关闭UAC或明确地"以管理员身份运行"或更改这些文件夹的默认权限,否则普通用户甚至管理员都无法写入上述位置(绕过默认权限的方法都有缺点,如果允许普通用户在programs
/system
文件夹中写入,则应进行认真的安全审查)。
不要使用硬编码的驱动程序字母。在运行时查找路径。例如:
saveFileDialog1.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
您可以使用环境变量systemroot来获取驱动器。尝试打开cmd提示符并输入set以查看所有可用环境变量的列表,然后使用System.Envrionment.GetEnvironmentVariable("systemdrive")并将其与路径的其余部分组合。