TPath.GetTempFileName
(包装WinAPI GetTempFileName
)从登录到域的用户运行的应用程序调用时回复“目录名无效”。
如果他们使用不使用域名的登录信息,则可以使用。
遇到问题的客户是在另一个国家/地区,我也不熟悉如何更改域控制器的配置以避免此问题。
我认为由于我的应用程序是无法正常工作的应用程序,我应该以不同的方式获取临时文件名。
“以管理员身份运行”无济于事。
我指示他们确保他们可以完全控制TEMP&中提到的文件夹。 TMP系统环境变量显然可以,但它仍然会产生相同的错误。
我的应用程序作为Win32 Delphi桌面应用程序,但由于Windows是错误的来源,我认为这些信息的用处有限。
Windows 10是操作系统。
答案 0 :(得分:8)
TPath.GetTempFileName
在一开始就调用TPath.GetTempPath
,但在使用返回的路径调用Winapi.Windows.GetTempFileName
之前不会检查它。
TPath.GetTempPath
的调用很可能会返回空路径或无效路径。
MSDN说:
GetTempPath
函数按以下顺序检查环境变量的存在,并使用找到的第一个路径:
TMP
环境变量指定的路径。TEMP
环境变量指定的路径。USERPROFILE
环境变量指定的路径。- Windows目录。
醇>
如果它将返回Windows目录,则呼叫不会因所述消息而失败。因此,可能在这三个环境变量之一中存在错误的路径。
您的客户应检查这些变量并根据存在情况对其进行验证。 你说,路径显然是"显然"好的。
经验教会我怀疑客户说他们检查了什么......您可以在致电TPath.GetTempPath
之前自己拨打TPath.GetTempFileName
来检查它是否存在。或者,您可以在出现故障时调用它,作为处理引发的异常的一部分并添加错误消息的路径。