Развертывание приложения Windows в Visual Studio 2010 Express
Я разработал приложение для Windows на C# в Visual Studio Express 2010. Теперь я хочу развернуть его.
Я использовал publish для развертывания, но когда я запускаю проект, он получает ошибку в форме, где я использовал некоторые внешние файлы, которые я использую для операций ввода-вывода, чтения и записи файлов.
Как мне решить эту ошибку? Я также использую одну папку для файлов.
3 ответа
Я большой поклонник использования WiX для инсталляторов - даже если у вас есть Visual Studio Pro со встроенными инструментами создания MSI
Преимущество WiX заключается в том, что вы можете делать практически все, от очень простого до очень сложного. Инструмент отличный, потому что вы можете быстро начать работу, а затем двигаться вверх (добавлять диалоги и т. Д.), Когда ваше приложение становится все более популярным.
Один прием для установщиков - рассмотрите возможность использования VMWare/HyperV, установите тестовую ОС, а затем сделайте снимок ОС перед установкой приложения. Если все работает, отлично - все готово. Однако, если что-то не так, откатите ОС до предустановочного снимка, исправьте ошибку и попробуйте снова.
- Добавьте эти внешние файлы в проект
- Щелкните правой кнопкой мыши внешние файлы в вашем VS. Установите Build Action как Content.
- Копировать в выходной каталог в CopyAlways
Затем попробуйте развернуть
Это может быть связано с разрешениями Windows 7 UAC. Несмотря на то, что современные книги, msdn и даже фрагменты в Visual Studio описывают методы ввода-вывода файлов, большинство из них не верны, если принять во внимание UAC.
Все ваши файловые операции должны выполняться в безопасных зонах UAC, таких как Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Вы не можете читать или записывать файлы в каталогах C:\Program Files (x86), если вы не повысили уровень своего приложения для работы с более высокими привилегиями.
Если вы устанавливаете приложение и щелкаете правой кнопкой мыши исполняемый файл и выбираете "Запуск от имени администратора", и все работает, проблема в UAC.
Если вы не закодировали ограничения UAC, я настоятельно рекомендую ознакомиться с ним. Это избавит от многих головных болей в будущем.
http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware