#vb6
#vb6
Вопрос:
Я беру на себя старый код в VB6.
Чтобы повысить надежность, я добавил тест на размер файла перед его чтением.
length = FileLen("c:Program Files (x86)xxxxfile.ini")
Очевидно, что файл существует, иначе я бы не спрашивал на форуме.
При запуске кода в Windows XP работает нормально. При запуске кода под Windows 10 length=0
.
Есть какие-нибудь подсказки?
Комментарии:
1. У меня нет решения, но я могу подтвердить, что это не общая проблема с Windows 10. У меня есть среда Windows 10 с VB6, и я протестировал функцию fileLen с несколькими INI-файлами на компьютере (в папке Windows и Program Files), и она смогла вернуть правильный размер.
2. Это должно сработать; это звучит как проблема с разрешением. Как насчет других файлов в C:Program Папка Files (x86) , работает ли fileLen ?
3. изменено разрешение на общий доступ … та же проблема.
4. Запустил приложение «от имени администратора», оно работает. Так что действительно проблема с разрешениями, как это выглядит, просто нужно выяснить, как их правильно установить.
5. У пользователей нет прав на запись в папки Program Files. Изменение разрешений — это дыра в безопасности. Ini-файлы переходят в ProgramData (для общесистемных настроек) или AppData для пользовательских настроек.
Ответ №1:
Переместил весь код из Program Files (x86)
работает нормально
Комментарии:
1. На самом деле это не «исправление», даже если оно обходит проблему для вас. Здесь у вас две проблемы. Основной из них заключается в том, что вы, похоже, не знаете о последствиях UAC, который был введен в 2006 году! Второстепенным является то, что вы, похоже, не знаете о перенаправлении WOW64: вы должны смотреть
Program Files
, и вы должны находить это либо с помощьюApp.Path
, либо с помощью специального запроса папки Shell32. В идеале вы должны использоватьProgramData
though и находить это также с помощью вызова оболочки.2. Вы правы, я не полностью осведомлен об этих последствиях UAC и WOW64, но мой код очень старый и очень ненадежный. На самом деле он использует переменную localdir, на которую указывает
Program Files (x86)
, поэтому исправление достаточно хорошо для меня. Но я изучу ваши указания. Спасибо