СА можно писать на "native" .NET языке программирования к примеру C#. При этом, используя во врямя или после инсталяции, все возможности “Среды выполнения” NET Runtime, установленной на сегодняшний день на почти всех компьютерах под управлением OS Windows.
Полученные в результате СА dll можно использовать во всех средах покетирования.
маленький пример : шифруем после инсталяции Пользователя и Пароль (не было сделано при разработке ранее ... упс)
Исходный код
- //CustomAction.cs
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Microsoft.Deployment.WindowsInstaller;
- using System.IO;
- using System.Diagnostics;
- using System.Xml;
- using System.Windows.Forms;
- namespace XXX.CustomAction
- {
- public class CustomActions
- {
- static ActionResult myActionResult = ActionResult.Success;
- [CustomAction]
- public static ActionResult PrerequisitesCheck(Session session)
- {
- session.Log("Begin CustomAction PrerequisitesCheck");
- string InstallDirectory = session.GetTargetPath("INSTALLLOCATION");
- session.Log("InstallDirectory: " + InstallDirectory);
- /////////////ваш код здесь
- session.Log("End CustomAction PrerequisitesCheck");
- return myActionResult;
- }
- [CustomAction]
- public static ActionResult PostCmd(Session session)
- {
- session.Log("Begin CustomAction PostCmd");
- string InstallDirectory = session.GetTargetPath("INSTALLLOCATION");
- session.Log("InstallDirectory: " + InstallDirectory);
- //Benutzer und Passwort verschlüsseln
- XXXConnectionInfoVerschluesseln(InstallDirectory, session);
- session.Log("End CustomAction PostCmd");
- return myActionResult;
- }
- public static void XXXConnectionInfoVerschluesseln(string FilePath, Session ssession)
- {
- XXX.DB.EncDesc Schluessel = new XXX.DB.EncDesc();
- ssession.Log("Start Benutzer und Passwort verschlüsselungsmethode.");
- string XXXDBdllconfig = Path.Combine(FilePath, "XXX.DB.dll.config");
- string User = string.Empty;
- string Password = string.Empty;
- if (File.Exists(XXXDBdllconfig))
- {
- try
- {
- //делаем это здесь :)
- }
- catch (Exception ex)
- {
- ssession.Log("ReadConfig - Fehler ex: " + ex.Message);
- }
- }
- else
- {
- ssession.Log(XXXDBdllconfig + " wurde nicht gefunden.");
- }
- }
- }
- }
Всегда возвращаю в ActionResult.Success, так это не так на текущий момент уж важно (программа может работать с двумя вариантами) и я не хочу прерывать процесс из за этого.
после "InstallFinalize" вызываем PostCmd из binary content(XXXCustomAction.CA.dll)