TPath.GetTempFileName回复"目录名无效"

X-R*_*Ray 4 windows delphi temp

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

如果他们使用不使用域的登录,它可以工作.

有问题的客户在另一个国家,我也不熟悉如何更改域控制器的配置以避免此问题.

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

"以管理员身份运行"并没有帮助.

我指示他们确保他们完全控制TEMP和TMP系统环境变量中提到的文件夹,显然他们这样做但它仍然给出了相同的错误.

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

Windows 10是操作系统.

Ren*_*ann 8

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

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

MSDN说:

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

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

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

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

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

  • 如果`TPath.GetTempPath()`返回一个空字符串,你可以使用`GetLastError()`找出`Windows.GetTempPath()`失败的原因.但要注意`TPath.GetTempPath()`可以[返回*截断*路径](http://stackoverflow.com/questions/3440492/).在内部,它(错误)使用[`Windows.GetLongPathName()`](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364980.aspx),但不检查转换失败. (2认同)