为什么我的程序在Windows 2008上运行时说“文件夹不存在”?

时间:2010-07-14 15:51:00

标签: delphi

我们有一个Delphi程序,其任务就像一个服务程序。它在特定时间段内观看特定文件夹,并且在Windows XP和2003上运行良好,但在Windows 2008r2 64bit上,当它想要创建自动文件夹时,它将显示以下消息:

  

...文件夹不存在。该文件可能已被移动或删除。

此消息导致程序暂停,这不好;它不应该被打断。 我该怎么办?


P.S。:我真的不知道是否在Stack Overflow或Server Fault中发布我的问题,所以我猜它应该在这里。

5 个答案:

答案 0 :(得分:8)

如果您尝试存储在Program Files(任一项)下,那么VirtualStore可能就是这样。看我的写作: http://www.clipboardextender.com/off-topic/vista-program-files-hide-and-seek

答案 1 :(得分:4)

你遗漏了...文件夹名称。虽然这是可以理解的,但它不会与程序文件(在x64上将分成2个目录)有关吗?

答案 2 :(得分:2)

Windows Server 2008能够使用“虚拟”文件路径。这意味着:'你看到的是你得到的'。 Windows资源管理器只显示“显示”名称。如果您尝试使用的路径确实存在,请使用cmd.exe检查文件路径。

答案 3 :(得分:2)

原因是文件虚拟化(例如参见http://msdn.microsoft.com/en-us/library/bb756960.aspxhttp://technet.microsoft.com/en-us/magazine/2007.06.uac.aspx)。

因为我们在stackoverflow.com上,而不是在serverfault.com上,我想添加所有其他答案,您可以使用Wow64DisableWow64FsRedirectionWow64RevertWow64FsRedirectionWow64EnableWow64FsRedirection函数(请参阅{{3} })控制程序中的文件虚拟化。在C#中使用此函数的示例,您可以在此处找到http://msdn.microsoft.com/en-us/library/aa365743.aspx

答案 4 :(得分:1)

您需要告诉我们确切的路径以及如何构建它。它可以像应用程序不使用env变量扩展一样简单,但假设用户的文件夹是以前的位置。

路径虚拟化(实际上有2个孩子)人们提到的只有当你的应用程序试图弄乱系统文件夹时才会打你。

如果你没有扩展像APPDATA,LOCALAPPDATA等env vars并且不期望在Win7和2k8上有更多这样的问题,那么更令人费解的问题会打动你。不仅用户文件的默认路径发生了变化,而且其中一些也可以在网络共享上 - 对于同一个用户。因此,如果你的运行是基于期望所有用户的东西将在%USERPROFILE%下的明确路径上运行,那么你会受到几个意外的打击。另请注意%ProgramData%。

找出最快的方法 - 打开cmd.exe,运行set,如果你看到一些你正在以其他方式构建的路径,请注意你需要为它们开始扩展env vars。然后打开cmd.exe作为32位应用程序并再次检查设置。您也可以通过Process Explorer从一些运行的32位或64位应用程序中选择它们。

将您的应用切换为64位版本将解决大多数虚拟化问题,但不能解决env var扩展问题。此外,如果您的应用程序正在触摸系统文件夹,您需要从代码请求提升运行,甚至更好地制作清单并在那里声明它。如果他的UAC打开并且您的应用程序将避免第二次虚拟化,那么操作系统将在用户面前大喊大叫。顺便说一句,虚拟化可以通过组策略进行控制,因此它可能存在于某些盒子上而在其他盒子上则丢失。

相关问题