TPath.GetTempFileName回复“目录名无效”

时间:2016-08-24 15:25:41

标签: windows delphi temp

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

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

遇到问题的客户是在另一个国家/地区,我也不熟悉如何更改域控制器的配置以避免此问题。

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

“以管理员身份运行”无济于事。

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

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

Windows 10是操作系统。

1 个答案:

答案 0 :(得分:8)

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

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

MSDN说:

  

GetTempPath函数按以下顺序检查环境变量的存在,并使用找到的第一个路径:

     
      
  1. TMP环境变量指定的路径。
  2.   
  3. TEMP环境变量指定的路径。
  4.   
  5. USERPROFILE环境变量指定的路径。
  6.   
  7. Windows目录。
  8.   

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

您的客户应检查这些变量并根据存在情况对其进行验证。 你说,路径显然是"显然"好的。

经验教会我怀疑客户说他们检查了什么......您可以在致电TPath.GetTempPath之前自己拨打TPath.GetTempFileName来检查它是否存在。或者,您可以在出现故障时调用它,作为处理引发的异常的一部分并添加错误消息的路径。