上周末,当我结束工作,准备备份虚拟机中的数据下班时,发现虚拟机突然不能复制文件到宿主机了,但是反向操作却可以,使用了这么久的虚拟机还是第一次遇到这个问题,首先说明下,我的虚拟机是Window Xp SP3系统,Vmware Workstation版本是V14.0,之前都是使用正常,很少出现从虚拟机拖动到宿主机失败的问题。
鉴于以前碰到此类问题的经验,一般都是重新安装下VMTool,基本都能修复此类问题,还有一种方法就是把虚拟机按正常关机流程关机后,在虚拟机设置中勾选"启用拖放"和"启用复制和粘贴",具体方法如下所示:
方法一,重新安装VMTOOL:

方法二,勾选"启用拖放"和"启用复制和粘贴":

其实方法二,还有一个修改VMX配置文件的方法三,在你需要的虚拟机配置文件(.VMX)中添加如下的代码:
isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"
isolation.tools.dragAndDrop.disable = "FALSE"
dragAndDrop.enabled = "TRUE"
copyPaste.enabled = "TRUE"
寻找.VMX文件的方法如下:
到如下目录找.VMX后缀结尾的文件,用记事本打开就可以修改,具体我就不再说明了。注意上面的几句代码,请不要和原本的.VMX文件中的代码重复,不然会报错,修改前请备份下.VMX文件,请注意一切操作请在关闭虚拟机的情况下操作。
我尝试了上面的方法,但是遇到了一些问题,现在也把方法和过程记录下来,给大家一个参考,首先就是重装VMTOOL工具的问题,提示"安装软件包时出错,Windows Installer返回"1601"。"
如图:

查询了下AI,提示我可能是Windows Installer的版本需要升级到4.5,注意这是一个小坑,我在其他电脑里的xp虚拟机测试了,Windows Installer版本是3.01
测试Windows Installer版本的方法如下:

cmd输入的命令如下:
msiexec /?
运行上面的命令后,会弹出一个Windows Installer的对话框,顶部就有版本号。
上面的版本号是我在能正常安装VMTool工具的XP虚拟机得到的,但是在出问题的XP虚拟机运行上面的命令,不能弹出任何窗口,在C:\Windows\System32中能查找msiexec.exe程序,右键属性可查看版本号为4.5,如下:

根据"安装软件包时出错,Windows Installer返回"1601"。"这个错误提示,我以为是Windows Installer没有启动,在计算机-右击-管理-服务-找到Windows Installer,显示状态停止,如图:

设置成自动,并点击启动,报错如下:

我在正常的xp虚拟机中查看此服务,也是停止状态,但是能够手动启动,如下图:

静下心来,思考了下,虽然现在不能确定重装VMTool后能否解决复制问题,但是这个Windows Installer必然是要修复下,不然之后在XP虚拟机上安装程序或需要修复VMTool时,还是需要解决这个问题。既然想明白这点,我们就直接把Windows Installer修复下,先看下最新的xp可用的Windows Installer版本,发现为Windows Installer 4.5,但是微软官方已不提供下载包了,大家可以看下这个微软说明网页
https://support.microsoft.com/zh-cn/topic/windows-installer-4-5-%E5%B7%B2%E6%8E%A8%E5%87%BA-bf06be18-3e0a-d5eb-4549-b482f67e1c46https://support.microsoft.com/zh-cn/topic/windows-installer-4-5-%E5%B7%B2%E6%8E%A8%E5%87%BA-bf06be18-3e0a-d5eb-4549-b482f67e1c46点击"[资产 4009805]立即下载 Windows Installer 4.5。"提示404错误,如下:

搜索了下链接中提到的XP SP2和SP3可用的 WindowsXP-KB942288-v3-x86.exe补丁文件,发现微软官方的补丁服务器上只提供一个Windows2003系统的X86补丁,不能运行在XP SP3上,经过查找,只能在第三方的平台下了个,链接如下:

下载后,把它复制到XP虚拟机中(因为我的情况是宿主机能复制到虚拟机,如果你不能复制,请使用U盘或共享文件复制到虚拟机),运行安装,安装前我先查看了原来是否安装过这个补丁(KB942288),发现早就安装过了,可能因为某些情况损坏了(事后回忆,前两天可能开启过WINXP的自动更新功能,不知道是不是这个原因-_-!)

然后我右键补丁包查看了下微软的证书是否正常后,直接安装了,如下:

点击同意

点击同意后,并没有直接安装,而是说我们的Window Installer正在运行,可能是之前尝试安装VMTool时开启的,我们在任务管理器中,右键结束进程,如下图:

结束进程后,点击继续,就能正常安装了,如下图:

点击完成后,会重启系统。启动系统后,我们在cmd中再次运行msiexec /?命令,发现Window Installer能正常显示版本了,在服务中运行Window Installer,也能开启了,如下图:

然后我们重新安装下VMTool试试,发现能正常运行安装程序了。如下:

我们继续安装看看,因为我们之前安装过,所以点击修复,发现能修复成功了,如下:



修复后点击是,会自动重启下,如下图:

重新启动后,我尝试了下,之前不能复制的问题,并没有解决,看来还不是这个问题。
我停下来回忆了下,这个问题也就今天才出现,显然是最近的某些操作导致了,而昨天我刚刚用,自己写的清理垃圾批处理程序,清理过temp文件夹的垃圾,而虚拟机复制操作可能需要通过temp文件夹临时转存下文件,而且我运行了本机的其他虚拟机也同样毛病,显然不是虚拟机内部的temp文件问题,而是宿主机的temp文件出问题了,我按Win+R快捷键打开运行,并输入%temp%,打开临时文件夹,确实有VM虚拟机的临时文件夹(在vmware-用户名,我的计算机名是VIP,所以是vmware-vip,请以你自己的名称为准,这个文件夹如果彻底清理过,需要重新打开下vm软件才能生成,最后我会说明这个bug的原因),如下图:


打开这个vmware-xxx文件夹后,可以看到里面有很多VM虚拟机的log日志文件,

我点击了修改日期,排序了下,把最近的一个log文件放到顶部,也就是上图中的vmware-ui-3912.log,打开后,下拉到最后,发现了问题的根源所在,如下图:

可以看到我蓝色选中的部分,就是这个vmware-xxx目录下还有一个文件夹,我的是VMwareDND文件夹,如下图(可以看到最下面的VMwareDND文件夹):

这个VMwareDND文件夹负责把虚拟机复制或拖动出的文件,暂时存放在这个VMwareDND的子文件夹中,但是日志中的报错信息显示,没有这个VMwareDND文件夹的读写权限,我们用文件浏览器打开这个文件夹试试,发现确实需要授权(我当时尝试时,没有截图,大家打开文件夹后,点击允许访问就行),允许后就能直接进入文件夹了,可以看到里面的子文件夹,如下图:

打开子文件夹,就能看到我们之前复制的文件了,我这里只是做一个例子,说明这个文件夹的作用,实际如果大家碰到这种情况,可能是没有fa645a2c这样的随机名称文件夹的,因为没有权限写入,所以VMwareDND是空的,要解决这个问题,我们只有授权VMwareDND读写权限就行。

问题是解决了,但是造成的原因我也想探究下,所以我关闭虚拟机后,重新运行了下,我的清理批处理程序,发现问题并没有复现,还是能正常复制,我怀疑可能是当时运行批处理后,导致文件夹的sid权限错乱了,这样虚拟机软件没有权限写入这个临时文件,因为我当时运行批处理时,虚拟机是开启状态,所以导致的冲突,我又测试了一遍,清理这个temp文件夹时,同时开启着虚拟机,接着把虚拟机关闭,重启电脑,进入系统后,测试虚拟机,发现果然不能拖动了,但是能复制黏贴。
最终解决的方法也很简单,关闭或挂起虚拟机,关闭vm软件,确认关闭vm虚拟机软件后,再运行清理temp文件,重启电脑后,就能修复拖动和复制的问题。
回想以前有时莫名出现的这类问题,可能就是因为开启着虚拟机清理垃圾导致的,过了这么多年,终于找到原因了,希望对大家以后碰到这类问题有帮助,谢谢观看,再见!
最后放一张拖动成功的图片,如下:
