СА можно писать на "native" .NET языке программирования к примеру C#. При этом, используя во врямя или после инсталяции, все возможности “Среды выполнения” NET Runtime, установленной на сегодняшний день на почти всех компьютерах под управлением OS Windows.
Полученные в результате СА dll можно использовать во всех средах покетирования.
маленький пример : шифруем после инсталяции Пользователя и Пароль (не было сделано при разработке ранее ... упс)
C#
//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)