728x90
728x170
TestSolution.zip
1.39MB
TestSolution.Deployment.zip
6.64MB
[TestAction 프로젝트]
▶ CustomAction.cs
using Microsoft.Deployment.WindowsInstaller;
using System;
using System.IO;
using System.Runtime.InteropServices;
using TestLibrary;
namespace TestAction
{
/// <summary>
/// 커스텀 액션
/// </summary>
public class CustomAction
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 전경 윈도우 구하기 - GetForegroundWindow()
/// <summary>
/// 전경 윈도우 구하기
/// </summary>
/// <returns>윈도우 핸들</returns>
[DllImport("user32")]
private static extern IntPtr GetForegroundWindow();
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 로그 헬퍼
/// </summary>
private static ILogHelper _logHelper = new FileLogHelper("d:\\", "TestNode.log");
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 설치 전 액션 실행하기 - ExecuteBeforeInstallAction(session)
/// <summary>
/// 설치 전 액션 실행하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult ExecuteBeforeInstallAction(Session session)
{
_logHelper?.WriteLog($"BEGIN EXECUTE BEFORE FIRST INSTALL ACTION : {ApplicationEnvironment.Version}");
_logHelper?.WriteLog($"END EXECUTE BEFORE FIRST INSTALL ACTION : {ApplicationEnvironment.Version}");
return ActionResult.Success;
}
#endregion
#region 설치 후 액션 실행하기 - ExecuteAfterInstallAction(session)
/// <summary>
/// 설치 후 액션 실행하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult ExecuteAfterInstallAction(Session session)
{
_logHelper?.WriteLog($"BEGIN EXECUTE AFTER FIRST INSTALL ACTION : {ApplicationEnvironment.Version}");
#region 윈도우즈 서비스를 생성하고 시작한다.
try
{
string directoryPath = session["APPDIR"];
string filePath = Path.Combine(directoryPath, ApplicationEnvironment.ServiceFileName);
_logHelper?.WriteLog($"SERVICE FILE PATH : {filePath}");
WindowsServiceHelper.CreateWindowsService(ApplicationEnvironment.ServiceName, filePath);
_logHelper?.WriteLog("SERVICE CREATED");
WindowsServiceHelper.StartWindowsService(ApplicationEnvironment.ServiceName);
_logHelper?.WriteLog("SERVICE STARTED");
}
catch(Exception exception)
{
_logHelper?.WriteErrorLog(exception, "ERROR EXECUTE AFTER FIRST INSTALL ACTION");
return ActionResult.Failure;
}
#endregion
_logHelper?.WriteLog($"END EXECUTE AFTER FIRST INSTALL ACTION : {ApplicationEnvironment.Version}");
return ActionResult.Success;
}
#endregion
#region 업그레이드 전 액션 실행하기 - ExecuteBeforeUpgradeAction(session)
/// <summary>
/// 업그레이드 전 액션 실행하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult ExecuteBeforeUpgradeAction(Session session)
{
_logHelper?.WriteLog($"BEGIN EXECUTE BEFORE UPGRADE ACTION : {ApplicationEnvironment.Version}");
#region 윈도우즈 서비스를 중단하고 삭제한다.
try
{
string directoryPath = session["APPDIR"];
string filePath = Path.Combine(directoryPath, ApplicationEnvironment.ServiceFileName);
_logHelper?.WriteLog($"SERVICE FILE PATH : {filePath}");
WindowsServiceHelper.StopWindowsService(ApplicationEnvironment.ServiceName);
_logHelper?.WriteLog("SERVICE STOPPED");
WindowsServiceHelper.DeleteWindowsService(ApplicationEnvironment.ServiceName);
_logHelper?.WriteLog("SERVICE DELETED");
}
catch(Exception exception)
{
_logHelper?.WriteErrorLog(exception, "ERROR EXECUTE BEFORE UPGRADE ACTION");
}
#endregion
_logHelper?.WriteLog($"END EXECUTE BEFORE UPGRADE ACTION : {ApplicationEnvironment.Version}");
return ActionResult.Success;
}
#endregion
#region 업그레이드 후 액션 실행하기 - ExecuteAfterUpgradeAction(session)
/// <summary>
/// 업그레이드 후 액션 실행하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult ExecuteAfterUpgradeAction(Session session)
{
_logHelper?.WriteLog($"BEGIN EXECUTE AFTER UPGRADE ACTION : {ApplicationEnvironment.Version}");
#region 윈도우즈 서비스를 생성하고 시작한다.
try
{
string directoryPath = session["APPDIR"];
string filePath = Path.Combine(directoryPath, ApplicationEnvironment.ServiceFileName);
_logHelper?.WriteLog($"SERVICE FILE PATH : {filePath}");
WindowsServiceHelper.CreateWindowsService(ApplicationEnvironment.ServiceName, filePath);
_logHelper?.WriteLog("SERVICE CREATED");
WindowsServiceHelper.StartWindowsService(ApplicationEnvironment.ServiceName);
_logHelper?.WriteLog("SERVICE STARTED");
}
catch(Exception exception)
{
_logHelper?.WriteErrorLog(exception, "ERROR EXECUTE AFTER UPGRADE ACTION");
}
#endregion
_logHelper?.WriteLog($"END EXECUTE AFTER UPGRADE ACTION : {ApplicationEnvironment.Version}");
return ActionResult.Success;
}
#endregion
#region 설치 제거 전 액션 실행하기 - ExecuteBeforeUninstallAction(session)
/// <summary>
/// 설치 제거 전 액션 실행하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult ExecuteBeforeUninstallAction(Session session)
{
_logHelper?.WriteLog($"BEGIN EXECUTE BEFORE UNINSTALL ACTION : {ApplicationEnvironment.Version}");
IntPtr windowHandle = GetForegroundWindow();
System.Windows.Forms.MessageBox.Show(new WIN32Window(windowHandle), "ExecuteBeforeUninstallAction");
#region 윈도우즈 서비스를 중단하고 삭제한다.
try
{
string directoryPath = session["APPDIR"];
string filePath = Path.Combine(directoryPath, ApplicationEnvironment.ServiceFileName);
_logHelper?.WriteLog($"SERVICE FILE PATH : {filePath}");
WindowsServiceHelper.StopWindowsService(ApplicationEnvironment.ServiceName);
_logHelper?.WriteLog("SERVICE STOPPED");
WindowsServiceHelper.DeleteWindowsService(ApplicationEnvironment.ServiceName);
_logHelper?.WriteLog("SERVICE DELETED");
}
catch(Exception exception)
{
_logHelper?.WriteErrorLog(exception, "ERROR EXECUTE BEFORE UNINSTALL ACTION");
}
#endregion
_logHelper?.WriteLog($"END EXECUTE BEFORE UNINSTALL ACTION : {ApplicationEnvironment.Version}");
return ActionResult.Success;
}
#endregion
#region 설치 제거 후 액션 실행하기 - ExecuteAfterUninstallAction(session)
/// <summary>
/// 설치 제거 후 액션 실행하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult ExecuteAfterUninstallAction(Session session)
{
_logHelper?.WriteLog($"BEGIN EXECUTE AFTER UNINSTALL ACTION : {ApplicationEnvironment.Version}");
IntPtr windowHandle = GetForegroundWindow();
System.Windows.Forms.MessageBox.Show(new WIN32Window(windowHandle), "ExecuteAfterUninstallAction");
_logHelper?.WriteLog($"END EXECUTE AFTER UNINSTALL ACTION : {ApplicationEnvironment.Version}");
return ActionResult.Success;
}
#endregion
}
}
※ 커스텀 액션 코드만 수정하고 테스트를 하였다. 배포는 '커스텀 액션을 사용해 윈도우즈 서비스 실행하기' 자료를 참조한다.
728x90
그리드형(광고전용)
'C# > Advanced Installer' 카테고리의 다른 글
[C#/ADVANCED INSTALLER] updates.txt 파일 정보 구하기 (0) | 2021.09.12 |
---|---|
[C#/ADVANCED INSTALLER] 커스텀 액션을 사용해 윈도우즈 서비스 실행하기 (0) | 2021.01.09 |
[C#/ADVANCED INSTALLER] 커스텀 액션 사용하기 (0) | 2021.01.05 |
[C#/ADVANCED INSTALLER] 업데이트 프로그램 강제 실행 코드 추가하기 (0) | 2020.05.30 |