WiX: Установка приложения в ProgramFilesFolder вызывает исключение AccessDenied. Почему?

#windows #visual-studio-2010 #dll #wix

#Windows #visual-studio-2010 #dll #wix

Вопрос:

У меня есть приложение на C # и проект WiX для установки этого приложения в ProgramFilesFolder. В моем приложении есть элемент просмотра, который использует DLL-файл. Если я запускаю приложение с обычными правами пользователя, я получаю сообщение об ошибке, и элемент viewer в моем приложении не загружается с сообщением об ошибке, что мой элемент viewer не имеет доступа к dll-файлу. Как пользователь с правами администратора он работает нормально. В моем проекте WiX я установил свойство perMachine, и у меня есть несколько других DLL-файлов, используемых в моем приложении, и я не получаю такой ошибки.

Если я устанавливаю свое приложение вне ProgramFilesFolder, проблем нет. Что мне делать? В VS2010 я могу установить действие сборки и скопировать в выходной каталог для каждого файла, нужно ли мне устанавливать что-то особенное? Или в элементе File в WiX есть опция для установки свойств доступа?

Комментарии:

1. Вы пытались запустить программу установки с правами администратора?

Ответ №1:

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

Решение заключается в запросе прав доступа через манифест вашего приложения. Таким образом, ваше приложение всегда запускается с правами администратора.

Комментарии:

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

2. Вам нужно найти способ сделать так, чтобы элемент viewer не требовал этих привилегий.

Ответ №2:

Вызывает ли это исключение при установке или при использовании приложения?

Если последнее, единственное предположение, которое у меня есть, это то, что рассматриваемая DLL пытается что-то записать в одну из защищенных папок, Program Files в данном случае. Вы должны устранить это, чтобы заставить его работать без прав администратора.

Комментарии:

1. Исключение генерируется при использовании приложения. Неужели нет другого выхода? Возможно, как и в системах unix, вы можете установить x-бит.

2. Нет, другого способа нет. Как сказал Космин, ваш компонент просмотра хочет выполнить запись в каталог установки, но это запрещено. Таким образом, вы либо даете ему разрешение на запись туда (с правами администратора), либо заставляете его записывать что-то в другой каталог, куда могут писать обычные пользователи. Это не имеет ничего общего с x-bit в Unix, и ситуация не похожа. Ваша проблема касается w-bit с точки зрения Unix.