1

私のプログラムは、Windowsのシステムパス(C:\ windows \ syswow64 ...)にいくつかのファイルを書き込みます。

このファイルの1つは、テスト上の理由で削除されました。何かを変更しているため、削除する必要があります。OK、ここでは問題ありません。ファイルはなくなりました(ほぼ...)。問題は、私のアプリケーションがまだファイルを取得していることです!それは楽しいです、私は本当にファイルを削除するので(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
4

2 に答える 2

2

私はあなたがファイルシステムリダイレクタ(MSDN)に見舞われていると思います

ほとんどの場合、32ビットアプリケーションが%windir%\ System32にアクセスしようとすると、アクセスは%windir%\SysWOW64にリダイレクトされます。%windir%\ lastgood \ system32へのアクセスは、%windir%\ lastgood\SysWOW64にリダイレクトされます。%windir%\ regedit.exeへのアクセスは、%windir%\ SysWOW64\regedit.exeにリダイレクトされます。

System32およびSYSWOW64フォルダーで発生するいくつかの魔法があります。(皮肉なことに、32ビットファイルはWOW64に保存され、64ビットファイルはSystem32に保存されます)

MSDNページは、考えられる解決策を提案しています。

32ビットアプリケーションは、%windir%\ System32を%windir%\ Sysnativeに置き換えることで、ネイティブシステムディレクトリにアクセスできます。WOW64は、ファイルシステムがアクセスをリダイレクトしてはならないことを示すために使用される特別なエイリアスとしてSysnativeを認識します。このメカニズムは柔軟性があり使いやすいため、ファイルシステムのリダイレクトをバイパスするための推奨メカニズムです。64ビットアプリケーションは、実際のディレクトリではなく仮想ディレクトリであるため、Sysnativeエイリアスを使用できないことに注意してください。

于 2012-08-08T14:39:36.273 に答える
2

Mark Petersが言ったことと非常によく似たメモで、発生する可能性のあるもう1つのことは、UACデータリダイレクトです。これは、そのフォルダーへの書き込みアクセス許可がないため、実際に表示されているのはにあるファイルです%LOCALAPPDATA%\VirtualStore\Windows\System32。アプリケーションは管理者権限で実行されますか?そうでない場合、ファイルが失われますか?

スーパーユーザーに関する同様の問題について説明している、はるかに長い投稿があります。

余談ですが、なぜプログラムがWindowsディレクトリ内のファイルにアクセスする必要があるのでしょうか。その要件をプログラムに追加するために何をしていますか?

于 2012-08-08T15:19:49.883 に答える