Привилегии администратора C ++ MSI - PullRequest
0 голосов
/ 22 мая 2018

Вот проблема, которая у меня возникает,

У меня есть приложение C ++, которое запускается путем записи данных в файлы .txt, и я хочу создать пакет MSI для приложения.

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

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

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

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

Все, что может получитьмой код, выполняющийся снова, был бы великолепен, спасибо.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Нет никакой связи между установкой приложения и запуском приложения в отношении привилегий.Другими словами, вы ничего не можете сделать в установке MSI, которая предоставляет повышенные привилегии устанавливаемому приложению.Было бы серьезным нарушением безопасности, если бы пользователь с ограниченными правами мог создать установку MSI, которая затем установила приложение, работающее с повышенными правами.

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

0 голосов
/ 23 мая 2018

Более продолжительная запись : System.UnauthorizedAccessException при запуске .exe в программных файлах (несколько других опций, помимо перечисленных ниже).


Папка для пользователя : я думаю, вам следует установить эти файлы в папку для пользователя (доступную для записи для пользователя -например My Documents), или в качестве шаблонов в папку на машину (недоступно для записи для обычных пользователей - например, %ProgramFiles%), а затем приложение должно скопировать шаблоны из местоположения на машину впапка My Documents текущего пользователя - например.Затем вы пишете в файлы там, где обычный пользователь будет иметь доступ для записи.Я полагаю, вы могли бы также написать в общий сетевой ресурс, который настроен для доступа пользователей.

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

ACLМодификация : также можно установить текстовые файлы в расположении для каждого компьютера и применить к ним разрешения ACL, чтобы они были доступны для записи обычным пользователям, даже если у них нет повышенных прав. Здесь есть некоторая информация о том, как это сделать (пункт 2).Этот подход не одобряется в наши дни, но он будет работать.Имейте в виду, что ваши права доступа ACL не должны быть слишком жесткими, если вы пишете в новый файл, удаляете старый и переименовываете новый файл в старое имя во время операции записи - вам нужно создать файл в дополнение к файлунапиши очевидно - в NTFS есть очень детальный контроль.GenericWrite должен сделать трюк, я думаю.


Некоторые ссылки (свободно подключены, добавлены для удобства поиска):

...