2012-08-08 79 views
1

我的程序在Windows系统路径(C:\ windows \ syswow64 ...)中写入一些文件。文件不在浏览器上显示,但VB.NET打开它

其中一个文件因测试原因被删除,我们正在更改某些内容,因此我们需要将其删除。好的,这里没有问题,文件不见了(差不多......)。 问题是,我的应用程序仍然收到文件!这很有趣,因为我真的删除了文件(shift + del)

我测试FileInfo类是否存在文件。

我要疯了。我看不出错在哪里。 而且肯定的是,在文件夹选项是让看到隐藏文件和系统文件...

谢谢

我的代码是波纹管:

Public Shared Function GetUserConfigFile() As String 
    Dim UserConfigFile As String = Metodos.GetUserConfigPath("config.gf") 
    'Above we have C:\Windows\SysWOW64\Microsoft\....\config.gf 

    Dim ConfigFile As New IO.FileInfo(UserConfigFile) 
    ConfigFile.Refresh() 

    EventLog.RegisterDebugMessage("ConfigFile.Exists:{0};ConfigFile.Length:{1}", ConfigFile.Exists, ConfigFile.Length) 
    If ((ConfigFile.Exists AndAlso ConfigFile.Length = 0) OrElse Not ConfigFile.Exists) Then 
     Dim config As StreamWriter = IO.File.CreateText(UserConfigFile) 
     config.WriteLine("<?xml version=""1.0""?><cnfg></cnfg> ") 
     config.Close() 
     config.Dispose() 
    End If 
    EventLog.RegisterDebugMessage("config.gf -> {0}", IO.File.ReadAllText(UserConfigFile)) 
    '''''''''''And here it's show me the content of the file... -.-'''''' 

    Return UserConfigFile 
End Function 
+0

你确定你在同一条路上工作吗? – 2012-08-08 14:22:46

+0

你真的不应该在这些日子的任何系统目录中写文件。 – 2012-08-08 14:24:14

+0

是啊...我之前想过这个......因为我们可以把这个文件放在SysWOW64或System32上......我都尝试过,没有成功。 我需要在那里写我的文件。 – lcssanches 2012-08-08 14:24:50

回答

2

在一个非常类似的说明什么马克·彼得斯说,这可能会发生的另一件事是UAC Data Redirection,因为你没有写权限到该文件夹​​,以便你真正看到的是位于%LOCALAPPDATA%\VirtualStore\Windows\System32文件。您的应用程序是否以管理权限运行,如果不是,那么文件在缺失时就会丢失?

我有一个更长的帖子来描述在Super User上的类似问题。

至于你为什么要“需要”让你的程序访问windows目录中的文件?你在做什么,将这一要求添加到你的程序中?

+0

究竟发生了什么!谢谢!你杀了鬼!大声笑 我们正在开发的应用程序需要隐藏的用户。你想认为这是一种病毒或类似的东西,每个人都这样做。但事实并非如此。它是一种收集一些信息的工具,可帮助管理员管理无法停止该工具的员工。 – lcssanches 2012-08-08 15:28:59

+0

您应该将其作为系统服务运行并使用组策略来防止用户禁用该服务。 – 2012-08-08 16:00:53

+0

是的,我知道我们的做法并不是最好的。 我们会将其更改为服务或驱动程序......但现在我们需要修复这些问题。 再次感谢您。 – lcssanches 2012-08-08 16:37:22

2

我猜想,您正在被击中文件系统重定向器(MSDN

在大多数情况下,每当一个32位的应用程序试图访问%WINDIR%\ System32下,访问将被重定向到%WINDIR%\ Syswow64资料。访问%windir%\ lastgood \ system32被重定向到%windir%\ lastgood \ SysWOW64。访问%windir%\ regedit.exe被重定向到%windir%\ SysWOW64 \ regedit.exe。

System32和SYSWOW64文件夹存在一些魔法。 (讽刺的是,32位文件存储在WOW 64和64位的文件存储在System32下)

的MSDN页提出了一种更多钞票溶液:

32位应用程序可以访问本地系统目录中,将%windir%\ Sysnative替换为%windir%\ System32。 WOW64将Sysnative识别为特殊别名,用于指示文件系统不应该重定向访问。该机制灵活且易于使用,因此,它是推荐的绕过文件系统重定向的机制。请注意,64位应用程序不能使用Sysnative别名,因为它是一个虚拟目录而不是真实目录。

+0

有趣......但我认为不是我的情况,我直接访问SYSWOW64文件夹。我对吗? – lcssanches 2012-08-08 14:48:26

+0

当然,如果重定向是在播放,那么读取和写入都会被重定向到相同的位置,否定报告的错误? – 2012-08-08 14:48:30

+1

@Matt你会这么认为,但它确实闻起来像是一个重定向问题 – 2012-08-08 14:56:16

相关问题