clickonce - для записи / чтения в каталог данных требуются права администратора? - PullRequest
2 голосов
/ 03 марта 2010

Справочная информация - я смотрю на использование clickonce для развертывания приложения WinForms через clickonce (через веб-сайт). Элементы относительно простого приложения: - это исполняемый файл и один файл базы данных (sqlite) - база данных (sqlite) должна иногда обновляться приложением (например, добавить таблицу, добавить столбец) - данные базы данных (это просто файл для sqlite) должны сохраняться при обновлении курса

Предположение - Я предполагаю, что лучший способ учесть вышеизложенное в clickone - это:

  • используйте каталог данных для определения местоположения файла базы данных sqlite
  • записать смарты в метод загрузки MainForm для:
    • проверить, нужно ли создавать файл базы данных в каталоге данных (DD) программно (через ApplicationDeployment.CurrentDeployment.IsFirstRun) или, если нет, скопировать существующий файл базы данных из области PRE (где clickonce должен был сделать его копия) в главную область DD
    • проверить версию файла базы данных в DD и затем обновить ее

Вопрос - Требуется ли для ClickOnce наличие специального доступа (администратора или повышенного уровня привилегий) для чтения / записи в / из Каталога данных, описанного выше? То есть могу ли я предположить, что ПК самого простого пользователя должен это делать (домашний или рабочий компьютер в организации) в целом.

спасибо

Ответы [ 2 ]

2 голосов
/ 03 марта 2010

Что я хотел бы предложить (проще всего), так это добавить файл (я считаю, что база данных SQLLite) как существующий ресурс, щелкнуть по нему правой кнопкой мыши, перейти к свойствам и изменить действие сборки на «Содержимое», а затем «Копировать в выходной каталог» на «Копировать новее».

Отсюда у вас есть 2 варианта:

Если вы никогда не будете изменять исходный файл SQL при обновлении, вы можете оставить его как есть, но если вы хотите вносить изменения время от времени, я бы предложил следующее:

        String appPath = Path.GetDirectoryName(Application.ExecutablePath);

        if (!System.IO.File.Exists(appPath + @"\Resources\SQLLite.db"))
        {
            System.IO.File.Copy(appPath + @"\Resources\SQLLiteIncluded.db", appPath + @"\Resources\SQLLite.db");
        }

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

\ Resources \ - это папка, которую я создал в своем проекте (которая копируется в путь к исполняемому файлу, если в нем есть файлы с содержимым), поэтому я включил ее в пути. (Это необязательно)

Что касается административных прав, мне не нужно никаких административных прав для этого в нашей сети, но мы развертываем через сетевой диск, а не через веб-сайт, но я бы предположил, что это будет то же самое.

1 голос
/ 03 марта 2010

Вы указываете, какие вещи доступа могут понадобиться. Например, в app.manifest можно добавить следующее:

<requestedExecutionLevel level=”requireAdministrator” uiAccess=”false” />

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

...