windows - TPath.GetTempFileName 回复 "The directory name is invalid"

标签 windows delphi temp

TPath.GetTempFileName(包含 WinAPI GetTempFileName)在从登录到域的用户运行的应用程序调用时回复“目录名称无效” .

如果他们使用未使用域的登录名,则可以。

遇到问题的客户在另一个国家,我也不熟悉如何更改域 Controller 的配置来避免这个问题。

我假设由于我的应用程序无法正常工作,所以我应该以不同的方式获取临时文件名。

“以管理员身份运行”没有帮助。

我已指示他们确保他们可以完全控制 TEMP 和 TMP 系统环境变量中提到的文件夹,显然他们可以控制,但仍然会出现相同的错误。

我的应用程序是 Win32 Delphi 桌面应用程序,但由于 Windows 是错误的来源,我认为此信息的用处有限。

Windows 10 是操作系统。

最佳答案

TPath.GetTempFileName 在最开始调用 TPath.GetTempPath 但在使用返回的调用 Winapi.Windows.GetTempFileName 之前不检查它路径。

很可能调用 TPath.GetTempPath 返回空路径或无效路径。

MSDN说:

The GetTempPath function checks for the existence of environment variables in the following order and uses the first path found:

  1. The path specified by the TMP environment variable.
  2. The path specified by the TEMP environment variable.
  3. The path specified by the USERPROFILE environment variable.
  4. The Windows directory.

如果它返回 Windows 目录,则调用不会因上述消息而失败。因此,这三个环境变量之一可能存在错误路径。

您的客户应该检查这些变量并验证它们是否存在。 你说,路径“显然”没问题。

经验告诉我怀疑客户所说的他们检查过的内容......您可以在调用 TPath.GetTempFileName 之前自行调用 TPath.GetTempPath 来检查是否它存在。或者,您可以在失败的情况下调用它作为处理引发的异常的一部分,并将路径添加到错误消息中。

关于windows - TPath.GetTempFileName 回复 "The directory name is invalid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127373/

相关文章:

delphi - 是否有一种解决方法可以使类运算符适用于内置类型

delphi - 当 Delphi 处于覆盖模式时,如何改变它的光标形状?

mysql - 我可以用其他临时表创建一个临时表吗

python - 如何在 Windows 10 上使用 ubuntu 设置 vagrant 作为开发服务器?

delphi - 有没有反编译Delphi的程序?

c++ - 我可以在 Windows 操作系统上使用本地套接字吗? - C++/Boost

java - (JAVA) 如何在浏览器中打开临时 htm 文件?

.net - 你能假设总是有一个 Windows 临时文件夹吗?

c - 如何从 Visual Studio C 编译器获得更有用的警告?

c# - GetHostAddresses 不同的错误代码