2010-11-02 4 views
4

This existing question on SO, вероятно, именно то, что мне нужно, но на него не ответил. ;)Приложение, установленное с WiX, не будет работать должным образом, если не будет работать как администратор

Я не понял этого в своем первоначальном тестировании моего установщика WiX, но мое приложение не работает должным образом в Windows 7 после его установки. Различные сборки должны читать/записывать файлы в моей папке установки, но доступ запрещен во время выполнения.

Если я запустил приложение в качестве администратора, он отлично работает. Я также могу изменить свойства приложения вручную, чтобы он всегда выполнялся как администратор. Однако я не хочу, чтобы пользователь каждый раз нажимал «Да» на приглашение UAC.

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

Может кто-нибудь объяснить почему: 1. Мой исполняемый файл, при запуске из папки bin/Debug, не должен запускаться как администратор и работает? 2. Как я могу заставить WiX установить исполняемый файл, чтобы он работал точно так же? (т. е. не требует щелчка правой кнопкой мыши + «Запуск от имени администратора»)

Спасибо!

ответ

6

Программы, как правило, не должны обрабатываться в папке Program Files, но если вам нужно это сделать, вам необходимо убедиться, что разрешения на установочную папку вашей программы установлены как часть процесса установки.

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

<Directory Id="DirectoryLogs" Name="Logs"> 
    <Component Id="ComponentCreateFolderLogs" Guid="SOME-GUID"> 
     <CreateFolder> 
      <Permission 
       GenericAll="yes" 
       User="Authenticated Users" /> 
     </CreateFolder> 
     <RemoveFile 
      Id="RemoveFileLogsAll" 
      Name="*.*" 
      On="uninstall" /> 
    </Component> 
</Directory> 

So установщик создаст папку Logs, предоставит все разрешения NTFS Authenticated Users, чтобы нанести ущерб этому каталогу и снести все файлы журналов, которые были созданы после первоначальной установки, как часть процесса удаления, чтобы оставить чистую деинсталляцию.

Отличный дизайн? Нет. Требования к логотипу Windows вызывают это из-за этого - но это особенно часто происходит во внутренних средах, поэтому так вы это делаете.

Удачи вам!

+0

Благодарим за пощечину на запястье. ;) Думаю, мне действительно нужно подумать об этом в будущем. Пока я попробую попробовать. Я должен был знать, что я должен писать этот материал в папку «Пользователи», а теперь, когда UAC везде! – Dave

+0

Вообще-то, я передумал. Я читаю Руководство MS для UAC и собираюсь переписать части кода, которые не соответствуют требованиям. Не могли бы вы порекомендовать записать файлы в «Пользователи \ Публичные \ Публичные документы», возможно? – Dave

+1

В зависимости от того, как он предназначен для использования, существует% APPDATA% [aka Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) в .NET] или имеется изолированное хранилище (которое в значительной степени живет в одном и том же месте, но к нему обращаются по-разному .СЕТЬ). Если это что-то вроде файла журнала, я сделаю себе папку в AppData и запишу там. Если это конкретная база данных для вашего приложения, я бы сохранил ее в изолированном хранилище. Что-нибудь еще - это подбросить. (См. Http://stackoverflow.com/questions/483840/when-should-i-opt-for-isolatedstorage-versus-appdata-file-storage). Удачи! –