我的一位客户在保存文件时遇到我的 WPF 应用程序崩溃。
我的保存文件代码是:
var saveFileDialog = new SaveFileDialog {
InitialDirectory = string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"\MyApp"),
FileName = "MyFile",
OverwritePrompt = true,
AddExtension = true
};
if (saveFileDialog.ShowDialog() == true) {
...
}
这是他们得到的例外:
Value does not fall within the expected range.
A System.ArgumentException occurred
at MS.Internal.Interop.HRESULT.ThrowIfFailed(String message)
at MS.Internal.AppModel.ShellUtil.GetShellItemForPath(String path)
at Microsoft.Win32.FileDialog.PrepareVistaDialog(IFileDialog dialog)
at Microsoft.Win32.FileDialog.RunVistaDialog(IntPtr hwndOwner)
at Microsoft.Win32.FileDialog.RunDialog(IntPtr hwndOwner)
at Microsoft.Win32.CommonDialog.ShowDialog()
(ShowDialog
最后一行中的 是指我在上面的代码中进行的调用。)
所以我的预感是,在我的客户的情况下,对 Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 的调用正在返回一些SaveFileDialog
不喜欢的InitialDirectory
. 我在网络搜索中发现(并验证)当传递相对路径作为InitialDirectory
SaveFileDialog 时会发生此错误。是否有可能Environment.SpecialFolder.MyDocuments
作为相对路径返回?如果没有,是否有人知道另一种可能无效的格式?某个 SpecialFolder.MyDocuments 网络路径可能是原因吗?还有其他想法吗?
我不能直接访问我客户的机器,他们也不是特别精通技术,所以不可能 100% 确定发生了什么。