文件存在于Windows资源管理器和记事本中,但在我的程序中无法访问
本文关键字:我的 程序 访问 Windows 资源管理器 文件 记事本 存在 | 更新日期: 2023-09-27 18:19:06
为什么会出现以下问题?
:
- 确保IIS已安装
- 使用admin执行
"notepad %WINDIR%'System32'inetsrv'config'applicationHost.config"
账户
实际结果:文件在记事本中打开成功
-
在admin帐户的上下文中执行以下代码:
string filePath = @"%WINDIR%'System32'inetsrv'config'applicationHost.config"; Console.WriteLine(File.Exists(Environment.ExpandEnvironmentVariables(filePath)));
实际结果: False
预期结果: True
问题是如果你在64位操作系统上运行32位应用程序,. net框架会自动将请求从%WINDIR%'System32
重定向到%WINDIR%'SysWOW64
。
如果您将项目更改为64位目标,这将解决您的问题。
你也可以通过将System32改为systemative来解决这个问题,但是只有当你将应用程序作为32位应用程序时:
string filePath = @"%WINDIR%'sysnative'inetsrv'config'applicationHost.config";
这可能是由于文件系统重定向。我想这可能发生在32/64位不匹配或低特权(UAC)进程的情况下。
我现在知道使用托管api禁用该行为的方法。您需要使用http://msdn.microsoft.com/en-us/library/windows/desktop/aa365743(v=vs.85).aspx和/或使用高权限进程。
如果您将您的项目更改为目标64位,这可能会解决您的问题。
我无法复制你的结果。当我从管理员命令行提示符运行此命令时,我得到exists = True
。
string s = @"%WINDIR%/System32'inetsrv'config'applicationHost.config";
bool exists = File.Exists(Environment.ExpandEnvironmentVariables(s));
Console.WriteLine("exists = {0}", exists);
我正在运行Windows Server 2008, 64位。net 4.0。