C# Приложение Winform работает только от имени администратора - PullRequest
2 голосов
/ 04 августа 2020

Я работаю над приложением, которое является Windows Form Application и выполняет операции CRUD в базе данных Microsoft Access (.mdb).

Старое приложение: Приложение было разработано в C# совместно с Microsoft. Net Framework 4.0.

Предыдущие разработчики использовали проекты установщика Visual Studio для создания файла установки. Путь установки по умолчанию: «C: \ Program Files (x86) \ MyProduct».

В этой папке будет исполняемый файл MyProduct.exe и зависимые библиотеки DLL, а также файл базы данных Microsoft Access (.mdb). Ярлык будет создан на рабочем столе. Когда вы запускаете MyProduct.exe, он может получить доступ к базе данных без каких-либо ошибок и может выполнять операции CRUD.

Новое приложение: Теперь я обновил платформу. Net до версии 4.5.2 и использовал Installshield для создания установщика. Путь установки будет таким же: «C: \ Program Files (x86) \ MyProduct».

Теперь проблема в том, что когда я выполняю exe и выполняю любую операцию вставки / обновления / удаления, возникает ошибка, которая «операция должна использовать обновляемый запрос». Это означает, что база данных недоступна. Я попытался запустить exe как администратор, и только тогда он работает нормально.

Моя операционная система - Window 10.

Примечание: я изменил свойства database.mdb и предоставил FullControl всем пользователям как новой, так и старой версии. Но новая версия не работает без администратора.

Для более новой версии я изменил путь установки на «C: \ My Folder \ MyProduct», и он работает без ошибок. Только C: \ Program Files выдает ошибку. Странно то, что более старая версия также установлена ​​в Program Files, но она не вызывает никаких ошибок.

Другое различие между старым и новым приложением заключается в том, что более старая версия использует драйвер движка Microsoft JET для использования базы данных Microsoft Access, а более новая версия использует драйвер Microsoft ACE OLEDB для использования базы данных Microsoft Access.

Я не уверен, почему это происходит. Старая версия работает, а новая - нет. Кто-нибудь может мне с этим помочь?

1 Ответ

1 голос
/ 05 августа 2020

Я бы переместил установку в% userappdata% или в другую папку, которая не требует повышенных прав. Хотя вы можете размещать .exe в программных файлах, ЛЮБОЙ файл данных в этих местах имеет ОЧЕНЬ ограниченные права в наши дни (они продолжают блокировать windows все больше и больше).

Также будьте осторожны. Даже если вы скажете, что у меня установлены документы? Если вам ТРЕБУЮТСЯ повышенные права во время этой установки, то зачастую ВО ВРЕМЯ установки файлы и папки, которые вы создаете, ТАКЖЕ будут иметь повышенные права.

Итак, не помещайте ЛЮБЫЕ файлы данных или файлы, которые есть в вашем коде. читать в программных файлах. В наши дни такие системные папки имеют тенденцию быть ограниченными и имеют заблокированные права.

% appdata% - ваш лучший выбор. В большинстве случаев это будет преобразовано в:

C:\Users\AlbertKallal\AppData\Roaming

. Это ТАКЖЕ означает, что вашему коду также лучше не иметь жестко заданных имен путей. (вы получаете / берете свой путь из исполняющейся сборки. Если у вас много кода и пути жестко запрограммированы? Тогда вы можете укусить пулю и сказать установить в c: \ MyCoolApp или в какую-то папку, которую вы создаете в c: \ drive. Однако, когда так много людей выполняют удаленную работу, даже c: \ SomeFolder может быть плохим выбором, поскольку в терминальных службах все пользователи используют один и тот же c: \ drive.

Итак, переместите установку из файлов программы или, по крайней мере, переместите части файла данных в известную папку для чтения / записи, к которой все пользователи по умолчанию будут иметь права и не требовать повышенных прав для использования таких папок . Итак, внимательно следите за любыми частями файла данных, которые у вас есть в процессе установки. Как уже отмечалось,% appdata% - хороший выбор, но имейте в виду, что имена путей к исполняемому файлу и расположение файла данных будут динамическими c (имя пользователя будет частью имени пути). И если вы не думаете, что когда-либо поддерживаете службы терминалов или удаленный рабочий стол? Тогда вы можете использовать / рискнуть жестким кодом d c: подход к папке \ MyApp.

В конце концов, вам ДЕЙСТВИТЕЛЬНО нужно избегать повышенных прав ВО ВРЕМЯ установки, и это особенно актуально, если файлы данных являются частью установки - так как эти файлы ТАКЖЕ унаследуют повышенные права во время установки. И, конечно, используя программный файл, который был распространен 10 или 15 лет go для программ И данных? Ну, программная часть все еще в порядке, но какие-либо файлы данных теперь не могут быть размещены в программных файлах для всех практических целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...