2012-08-08 101 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

相關問題