我正在 Windows 7 上的 Program Files 下使用 NSIS 构建的安装程序安装一个 Ruby 应用程序(以及打包的 ruby 解释器)。为了调试它,我编辑了其中一个文件以添加一些调试语句。之后,我卸载了该软件包并运行了新版本的安装程序,其中包括已编辑文件的新副本,没有调试语句。
现在,我无法将新副本加载到 ruby 中。如果我运行type <filename>
在cmd.exe中,或者在Notepad.exe或Firefox中打开该文件,我看到了新版本。如果我运行ruby -e "puts File.read('<filename>')"
,或者在emacs中打开文件,我看到的是旧版本。
如果在 Windows 资源管理器中将文件复制到新文件名,则所有内容都可以看到该文件名的新内容。如果我删除原始文件并重命名副本以替换原始文件,人格 split 就会恢复。
这种情况在重新启动后仍然存在,因此这不是一个文件意外保持打开状态的简单问题。
这里到底发生了什么?安装过程的某些方面是否可能以我可以恢复的方式检查文件,或者至少在调试安装程序时关闭?
更新
如果我运行ruby -e "puts File.read('<filename>')"
在以管理员身份运行的控制台中,我看到了正确的新内容。我应该如何管理这个文件?
最佳答案
我认为这与 UAC 文件系统虚拟化有关。检查您的文件是否存在于C:\Users\<username>\AppData\Local\VirtualStore
中。如果存在,请将其从 VirtualStore 中删除。
您在运行管理员控制台时看到正确的文件这一事实证明,这是由于虚拟化造成的:针对提升的进程关闭了 UAC 虚拟化。
关于ruby - Program Files 下的文件具有人格 split ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330516/