Showing posts with label Setup. Show all posts
Showing posts with label Setup. Show all posts

Mar 28, 2012

ASP.NET MVC extension points in action

Recently I made a tech talk about my alt.net web stack of love. It has lots of things there. Validation, NHibernate, Routing etc. So here are slides:

Source code for it is on bitbucket. Its purpose is just see it all in action. If you want, you should move code your new/old projects. Don’t try to make some type of project template out of it.

To try things out

Once again link to sources.

I was asked to give some kind of practice task to try all stack together. So here it is:

Implement blog details page to show posts inside it. So when I open localhost/blogs/3 I should see something like:

untitled_page

When I navigate to post details page I should be able to see post content and leave comments. Just like on this blog Smile.

Dec 21, 2009

Имперсонализация в Setup Projects

Данный пост покажет не только само решение проблемы, но и путь поиска этого решения. Возможно именно этот путь окажется более полезным, нежели само решение.

Для выполнения кода разработчика в Setup projects используются Custom Actions. Особенностью является то, что процесс установки запускается от имени пользователя SYSTEM. И поэтому Ваш код так же выполняется от имени SYSYTEM.

В одном из проектов было требование, чтобы приложение автоматически запускалось после завершения установки. Setup project не позволяют отловить нажатие кнопки Finish в конце установки. Наиболее позднее событие, доступное для обработки это Commit. Оно вызывается в момент фиксации успешной установки (визуально это происходит когда прогресс бар дошел до конца). Для запуска приложения я использовал Process.Start. Но приложение запускалось от имени SYSTEM. Из-за этого ему были не доступны настройки прокси сервера из браузера, а они были необходимы для работы.

Требовался способ запустить установку от имени текущего пользователя. Поиск велся в направлении Impersonation in setup projects.

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

You'd revert to running impersonated by editing the MSI file with the tool Orca in the Windows SDK and turning off the msidbCustomActionTypeNoImpersonate bit in the CustomAction table entries for your custom action, in the Type value.

В целом это позволило сделать вывод, что имперсонализацию, можно включить, сбросив флаг msidbCustomActionTypeNoImpersonate, дальнейший поиск велся именно в этом направлении.

В итоге чтобы включить имперсонализацию, необходимо сделать следующее:

  1. Установить утилиту orca
  2. Открыть с её помощью Ваш msi файл
  3. В левой колонке найти раздел CustomAction и выбрать его
  4. В правой части найти необходимый Custom Action
  5. Найти необходимый вам Action (в именах действий будет предшествовать некоторый Guid)
  6. Из цифры Type, соответствующей нужному действию вычесть 2048 (на самом деле этим выставляется в 0 определенный бит)
  7. Заменить Type на полученный результат
  8. Сохранить

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

Dec 1, 2009

Пустой License Agreement диалог в Setup project

Setup проекты удобны для создания простых инсталляционных пакетов. Они предоставляют довольно широкий спектр различной функциональности. Среди них такие диалоги как лицензионное соглашение (License Agreement dialog) и справку (Read Me). Чтобы их добавить достаточно указать .rft файл с содержимым, которое будет отображаться пользователю.

Но если создать файл в обычном текстовом редакторе (notepad например) и сохранить его как rtf, то при установке пользователь увидит пустое сообщение. В общем чтобы такого не было необходимо rft файлы сохранять через WordPad или что-то подобное.

Jun 24, 2009

Web setup projects troubles

При использовании инсталляционных пакетов возникла следующая проблема: 1. Запускается msi файл, который обнаруживает, что .net Framework нужной версии не установлен, и предлогает установить его. 2. Устанавливается .net и предлогает перезагрузку. А далее при запуске установочного файла происходит следующее - инсталляция прерывается и выдает сообщение: "The installer was interrupted before [Application] could be installed. You need to restart the installer to try again. Click "Close" to exit. "
Одним из способов понять что происходит есть запуск msi инсталляции с подробным логированием происходящего. Сделать это можно из командной строки следующим образом:
msiexec /i [Full path to the msi file] /lv [full path to the log file]
Выполнив эту команду был получен довольно таки большой лог. В самом конце которого было следующее сообщение:
DEBUG: Error 2826: Control Line1 on dialog FatalErrorForm extends beyond the boundaries of the dialog to the right by 3 pixels The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2826. The arguments are: FatalErrorForm, Line1, to the right
Долго искав что это, и ничего не найдя я начал просматривать остальную часть лога. И наткнулся на следующее:
ERROR : [06/24/2009 10:15:46:546] [RegisterAspNet]: The error indicates that this version of ASP.NET must first be registered on the machine.
ERROR : [06/24/2009 10:15:46:546] [RegisterAspNet]: FAILED: -2147024893 ERROR : [06/24/2009 10:15:46:562] [RegisterAspNet]: Custom Action failed with code: '0'
После этого я руками запустил aspnet_regiis /i и инсталлер заработал. Не ясно почему web.setup проект своим запуском не смог зарегистрировать .net. Хотя в логах написано что вызывался aspnet_regiis с правильными параметрами.
Мораль сего такова, логи это хорошо :)