Каталог Windows Explorer в виде пакета

Я уже некоторое время изучаю способ предотвратить случайный вход моего пользователя в каталог данных моего приложения.

Мое приложение использует папку для хранения структурированного проекта. Внутренняя структура папок критична и не должна нарушаться. Я бы хотел, чтобы мой пользователь видел эту папку целиком и не мог ее открывать (как пакет Mac).

Есть ли способ сделать это в Windows?

Редактировать из текущих ответов

Конечно, я не пытаюсь помешать моим пользователям получить доступ к своим данным, а просто защищаю их от случайного нарушения целостности данных. Так что шифрование или защита паролем не нужны.

Спасибо всем за ответы .Net, но, к сожалению, это в основном проект на C++, не зависящий от инфраструктуры .Net.

Приведенные мной данные не являются световыми, это изображения, полученные с помощью электронного микроскопа. Эти данные могут быть огромными (от ~ 100 МиБ до ~ 1 ГиБ), поэтому загрузка всего в память не вариант. Это огромные изображения, поэтому хранилище должно обеспечивать способ чтения данных постепенно, обращаясь к одному файлу за раз, не загружая весь архив в память.

Кроме того, приложение в основном является устаревшим, с некоторыми компонентами, за которые мы даже не несем ответственности. Предпочтительно решение, которое позволяет мне сохранить текущий код ввода-вывода.

Shell Extension выглядит интересно, я буду исследовать решение дальше.

LarryF, не могли бы вы подробнее рассказать о драйвере фильтра или DefineDOSDevice? Я не знаком с этими концепциями.

Можете ли вы пролить свет на то, на каком языке / в какой среде вы находитесь?

Tomalak 12.12.2008 22:31

Конечно обновил ответ

Vincent Robert 13.12.2008 17:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
834
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Внутри или вне вашей программы?

Есть способы, но ни один из них не прост. Вы, вероятно, будете искать драйвер фильтра в файловой системе.

Вы можете обернуть каталог своего проекта в файл .zip и хранить там свои данные, так же, как используется .jar (я знаю, что .jar в значительной степени доступен только для чтения, это для примера). Сделайте нестандартное расширение, чтобы двойной щелчок не имел немедленного эффекта, готово. ;-)

Конечно, это означает, что вам придется обернуть весь ввод-вывод файла, чтобы вместо этого использовать .zip, в зависимости от того, как построена ваша программа, это может быть утомительно. Это уже сделано для Java: TrueZip. Может быть, ты сможешь использовать это как вдохновение?

Если вас соблазнило - я бы не рекомендовал возиться с правами доступа к папкам, по понятным причинам это не поможет.

Вы можете сделать следующее:

Одна вещь заключается в том, что вы можете создать расширение оболочки Windows FolderView, которое будет создавать настраиваемое представление для вашей критически важной папки. Создав собственный FolderView, вы можете сделать папку просто пустой белой с одной строкой текста «Здесь нечего видеть», или вы можете сделать что-то более сложное, например, средство просмотра GAC, которое использует тот же метод. Этот метод был бы довольно сложным, но эту сложность можно уменьшить, используя в качестве основы что-то вроде библиотеки статей этот CodeProject.

Другое решение - создать ZIP Virtual Filesystem, для этого вам потребуется заменить любой код, который напрямую использует System.IO, чтобы использовать что-то еще. ASP.NET 2.0 сделал это именно по этой причине, и вы могли бы довольно легко построить поверх этого, взгляните на этот Статья MSDN при реализации VirtualPathProvider.

Похоже, это в основном для ASP.NET, но он ничего не упомянул об ASP или .NET ... Однако идеи хорошие.

LarryF 12.12.2008 23:42

Вы можете использовать изолированное хранилище.

http://www.ondotnet.com/pub/a/dotnet/2003/04/21/isolatedstorage.html

Это не решает всех проблем, но надежно защищает данные приложения.

Имейте в виду: если вы сохраните его в файловой системе, пользователь ВСЕГДА сможет его увидеть. Взломайте проводник, и вместо этого я использую cmd.exe. Или Total Commander. Или что-нибудь еще.

Если вы не хотите, чтобы люди возились с вашими файлами, я бы порекомендовал

  • их шифрование, чтобы предотвратить подделку файлов
  • помещая их в архив (например, ZIP), возможно, защищая его паролем, а затем сжимая / распаковывая во время выполнения (я бы поискал алгоритмы, которые быстро изменяют архивы)

Это, конечно, не полная защита, но она довольно проста в реализации, не требует установки каких-то забавных вещей внутри операционной системы и должна отпугнуть самых любопытных пользователей.

Конечно, вы никогда не сможете полностью контролировать файлы на компьютере пользователя, не управляя самим компьютером.

Я видел программное обеспечение (Agilian от Visual Paradigm), которое использовало предложение Томалака о zip-архиве в качестве «файла проекта». Zip-файлы хорошо изучены, а использование нестандартного расширения файла не позволяет случайному пользователю вмешиваться в «файл». Одним из больших преимуществ этого является то, что в случае повреждения можно использовать стандартные инструменты для решения проблемы, и вам не нужно беспокоиться о создании специальных инструментов для поддержки вашего основного приложения.

Если вы воспользуетесь подходом к ZIP-файлу (который я рассмотрел для вас, но не упомянул), я бы предложил использовать алгоритм deflate, но использовать вашу собственную файловую систему ... Посмотрите на что-то вроде формата TAR. Затем просто напишите свой код, чтобы пропускать ВСЕ операции ввода-вывода через алгоритмы Inflate / Deflate по мере их записи на диск. Я бы не стал использовать ZIP "FORMAT", так как слишком просто посмотреть файл, найти PK в первых двух байтах и ​​разархивировать файл ....

Мне больше всего нравятся предложения Джошперри.

Конечно, вы также можете написать драйвер устройства, который хранит все ваши данные в одном файле, но, опять же, мы ищем драйвер. (Я не уверен, что вы могли бы реализовать это вне драйвера. Вы, ВЕРОЯТНО, можете, и внутри вашей программы вызовите DefineDOSDevice, дав ему имя, к которому имеет доступ только ваш код, и он будет рассматриваться как обычная файловая система. ). Я поиграю с некоторыми идеями, и если они сработают, я сниму вам образец. Теперь вы меня заинтересовали.

Ответ принят как подходящий

Похоже, начинают появляться какие-то Порты Windows FUSE. Я думаю, что это было бы лучшим решением, поскольку оно позволило бы мне сохранить устаревший код (который довольно велик) нетронутым.

Структурированное хранилище был разработан для описываемого вами сценария:

Structured Storage provides file and data persistence in COM by handling a single file as a structured collection of objects known as storages and streams.

«Хранилище» аналогично папке, а «поток» аналогичен файлу. По сути, у вас есть один файл, который при доступе с использованием API структурированного хранилища ведет себя и выглядит как полная автономная файловая система.

Однако обратите внимание, что:

A solid understanding of COM technologies is prerequisite to the developmental use of Structured Storage.

Это было бы отличной идеей, если бы у меня не было такого большого количества устаревшего кода. Я быстро взглянул на API, и похоже, что вам нужно использовать определенные COM-интерфейсы (IStream) для чтения содержимого «файлов» в вашем хранилище. Таким образом, с этим решением невозможно использовать существующий код.

Vincent Robert 08.02.2010 14:33

Другие вопросы по теме