Файл не отображается в проводнике, но VB.NET открывает его

Моя программа записывает некоторые файлы по системному пути Windows (C:\windows\syswow64...).

Один из этих файлов был удален для проверки, мы что-то меняем, и нам нужно его удалить. Хорошо, здесь нет проблем, файл пропал (почти...). Проблема в том, что мое приложение все еще получает файл! Это весело, потому что я действительно удаляю файл (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

person lcssanches    schedule 08.08.2012    source источник
comment
Вы уверены, что работаете по тому же пути?   -  person Jaime Oro    schedule 08.08.2012
comment
В наши дни вам действительно не следует записывать файлы ни в какие системные каталоги.   -  person Damien_The_Unbeliever    schedule 08.08.2012
comment
Да... Я думал об этом раньше... потому что мы можем поместить этот файл в SysWOW64 или System32... Я пробовал оба, но безуспешно. Мне нужно записать туда свои файлы.   -  person lcssanches    schedule 08.08.2012
comment
Вы пытались проверить в отладчике, содержит ли UserConfigFile путь, который вы ожидаете? Кроме того, файлы конфигурации пользователя обычно не помещаются в системные каталоги.   -  person ikh    schedule 08.08.2012
comment
Да. Это тот же путь, который я ищу. Я знаю, что это не самое лучшее место, но мне это нужно там. Я не могу это изменить. Я только что попытался скопировать файл по указанному пути, и вы хотите знать? Это было. Я совершенно уверен, что это небольшая проблема, но я не вижу ее.   -  person lcssanches    schedule 08.08.2012
comment
Виртуализация файлов UAC?   -  person Camford    schedule 08.08.2012
comment
@Camford, я думаю, ответ - нет. Это виртуальная машина. Я не уверен, что такое виртуализация файлов.   -  person lcssanches    schedule 08.08.2012
comment
О... Я забыл сказать, что у меня есть еще 5 файлов в папке, которые отображаются в проводнике...   -  person lcssanches    schedule 08.08.2012


Ответы (2)


По аналогии с тем, что сказал Марк Питерс, может произойти еще одна вещь: Перенаправление данных UAC, потому что у вас нет прав на запись в эту папку, так что вы на самом деле видя файлы, расположенные в %LOCALAPPDATA%\VirtualStore\Windows\System32. Запускается ли ваше приложение с правами администратора, если нет, то пропадают ли при этом файлы?

У меня есть гораздо более длинный пост с описанием подобной проблемы на привилегированный пользователь. .

Кроме того, почему вам «нужно», чтобы ваша программа обращалась к файлам в каталоге Windows? Что вы делаете, что добавляет это требование к вашей программе?

person Scott Chamberlain    schedule 08.08.2012
comment
Именно то, что происходило! Благодарю вас! Ты убиваешь призрака! lol Приложение, которое мы разрабатываем, должно быть скрыто от пользователя. Вы хотите думать, что это вирус или что-то в этом роде, все так думают. Но это не так. Это инструмент для сбора некоторой информации, чтобы помочь администратору управлять сотрудником, который не может остановить инструмент. - person lcssanches; 08.08.2012
comment
Вы должны запускать его как системную службу и использовать групповую политику, чтобы пользователь не мог отключить службу. - person Scott Chamberlain; 08.08.2012
comment
Да, я знаю, что то, как мы поступаем, не самое лучшее. Мы собираемся изменить его на сервис или драйвер... но теперь нам нужно все исправить. Еще раз спасибо. - person lcssanches; 08.08.2012
comment
+1 Хороший ответ. Это объясняет различия. Я люблю SO, потому что каждый день узнаю что-то новое. - person Mark Peters; 08.08.2012

Я предполагаю, что вас поражает перенаправитель файловой системы (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, так как это виртуальный каталог, а не реальный.

person Mark Peters    schedule 08.08.2012
comment
Интересно... но думаю это не мой случай, у меня прямой доступ к папке SYSWOW64. Я прав? - person lcssanches; 08.08.2012
comment
Конечно, если бы перенаправление было в игре, то и чтение, и запись были бы перенаправлены в одно и то же место, отрицая сообщение об ошибке? - person Matt Wilko; 08.08.2012
comment
@Matt Вы бы так подумали, но для меня это точно пахнет проблемой перенаправления. - person Mark Peters; 08.08.2012