728x90
반응형
728x170
■ 디렉토리 구조
디렉토리 경로 | 설명 |
C:\TestProject AdvancedInstaller Updates | Advanced Installer 업데이트 구성 프로젝트 |
C:\TestProject AdvancedInstaller V1 | Advanced Installer 오피스 애드인 프로젝트 (버전 1) |
C:\TestProject AdvancedInstaller V2 | Advanced Installer 오피스 애드인 프로젝트 (버전 2) |
C:\TestProject V1 | Outlook 애드인 소스 코드 (버전 1) |
C:\TestProject V2 | Outlook 애드인 소스 코드 (버전 2) |
C:\TestProject.WebServer | 웹 서버 디렉토리 |
■ Outlook 애드인 소스 코드
※ 버전 1, 버전 2의 대부분 동일하나 경로나 명칭에서 달라질 수 있다.
[TestProject 프로젝트]
▶ CustomAddIn.cs
using Microsoft.Office.Tools;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace TestProject
{
/// <summary>
/// 커스텀 애드인
/// </summary>
public partial class CustomAddIn
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 커스텀 컨트롤
/// </summary>
private CustomControl customControl;
/// <summary>
/// 커스텀 태스크 창
/// </summary>
private CustomTaskPane customTaskPane;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 커스텀 애드인 시작시 처리하기 - CustomAddIn_Startup(sender, e)
/// <summary>
/// 커스텀 애드인 시작시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void CustomAddIn_Startup(object sender, EventArgs e)
{
#region 프로그램 디렉토리 경로를 설정한다.
string programDirectoryPath = "c:\\DSCore\\TestProject";
#endregion
#region 프로그램 디렉토리가 없는 경우 생성한다.
if (!Directory.Exists(programDirectoryPath))
{
Directory.CreateDirectory(programDirectoryPath);
}
#endregion
#region 로그 디렉토리 경로를 설정한다.
string logDirectoryPath = Path.Combine(programDirectoryPath, "Log");
#endregion
#region 로그 디렉토리가 없는 경우 생성한다.
if (!Directory.Exists(logDirectoryPath))
{
Directory.CreateDirectory(logDirectoryPath);
}
#endregion
#region 로그 헬퍼를 설정한다.
ILogHelper logHelper = new FileLogHelper(logDirectoryPath, "test.log");
#endregion
#region 실행 디렉토리 경로를 설정한다.
string executingDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
logHelper?.WriteLog($"EXECUTING DIRECTORY PATH : {executingDirectoryPath}");
#endregion
#region 업데이터를 실행한다.
try
{
string updaterPath = Path.Combine(programDirectoryPath, "updater.exe");
logHelper?.WriteLog($"UPDATER PATH : {updaterPath}");
if(File.Exists(updaterPath))
{
Process process = Process.Start(updaterPath, "/silentall");
process.WaitForExit();
logHelper?.WriteLog($"UPDATER PROCESS EXIT CODE : {process.ExitCode}");
if(process.ExitCode == 0)
{
return;
}
}
}
catch(Exception exception)
{
logHelper?.WriteErrorLog(exception, "ERROR EXECUTE UPDATER");
}
#endregion
#region 테스트 태스크 창을 추가한다.
this.customControl = new CustomControl();
this.customTaskPane = CustomTaskPanes.Add(this.customControl, "테스트 태스크 창");
this.customTaskPane.Visible = true;
#endregion
}
#endregion
#region 커스텀 애드인 셧다운시 처리하기 - CustomAddIn_Shutdown(sender, e)
/// <summary>
/// 커스텀 애드인 셧다운시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void CustomAddIn_Shutdown(object sender, EventArgs e)
{
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region VSTO에서 생성한 코드
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(CustomAddIn_Startup );
this.Shutdown += new System.EventHandler(CustomAddIn_Shutdown);
}
#endregion
}
}
[TestProject.Action 프로젝트]
▶ CustomAction.cs
using Microsoft.Deployment.WindowsInstaller;
using System.Diagnostics;
using System.IO;
namespace TestProject.Action
{
/// <summary>
/// 커스텀 액션
/// </summary>
public class CustomAction
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 로그 헬퍼
/// </summary>
private static ILogHelper _logHelper = null;
/// <summary>
/// 아웃룩 프로세스명
/// </summary>
private static readonly string _outlookProcessName = "OUTLOOK";
/// <summary>
/// 아웃룩 파일명
/// </summary>
private static readonly string _outlookFileName = "OUTLOOK.exe";
/// <summary>
/// 아웃룩 프로세스 실행 여부
/// </summary>
private static bool _isRunningOutlookProcess = false;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Static
#region 생성자 - CustomAction()
/// <summary>
/// 생성자
/// </summary>
static CustomAction()
{
#region 프로그램 디렉토리 경로를 설정한다.
string programDirectoryPath = "c:\\DSCore\\TestProject";
#endregion
#region 프로그램 디렉토리가 없는 경우 생성한다.
if (!Directory.Exists(programDirectoryPath))
{
Directory.CreateDirectory(programDirectoryPath);
}
#endregion
#region 로그 디렉토리 경로를 설정한다.
string logDirectoryPath = Path.Combine(programDirectoryPath, "Log");
#endregion
#region 로그 디렉토리가 없는 경우 생성한다.
if (!Directory.Exists(logDirectoryPath))
{
Directory.CreateDirectory(logDirectoryPath);
}
#endregion
#region 로그 헬퍼를 설정한다.
_logHelper = new FileLogHelper(logDirectoryPath, "test.log");
#endregion
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 최초 설치 전 처리하기 - BeforeFirstInstall(session)
/// <summary>
/// 최초 설치 전 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult BeforeFirstInstall(Session session)
{
_logHelper?.WriteLog("BEGIN BEFORE FIRST INSTALL FUNCTION");
RemoveOutlookProcess();
_logHelper?.WriteLog("END BEFORE FIRST INSTALL FUNCTION");
return ActionResult.Success;
}
#endregion
#region 최초 설치 후 처리하기 - AfterFirstInstall(session)
/// <summary>
/// 최초 설치 후 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult AfterFirstInstall(Session session)
{
_logHelper?.WriteLog("BEGIN AFTER FIRST INSTALL FUNCTION");
ExecuteOutlookProcess();
_logHelper?.WriteLog("END AFTER FIRST INSTALL FUNCTION");
return ActionResult.Success;
}
#endregion
#region 유지보수 전 처리하기 - BeforeMaintenance( session)
/// <summary>
/// 유지보수 전 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult BeforeMaintenance(Session session)
{
_logHelper?.WriteLog("BEGIN BEFORE MAINTENANCE FUNCTION");
RemoveOutlookProcess();
_logHelper?.WriteLog("END BEFORE MAINTENANCE FUNCTION");
return ActionResult.Success;
}
#endregion
#region 유지보수 후 처리하기 - AfterMaintenance(session)
/// <summary>
/// 유지보수 후 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult AfterMaintenance(Session session)
{
_logHelper?.WriteLog("BEGIN AFTER MAINTENANCE FUNCTION");
ExecuteOutlookProcess();
_logHelper?.WriteLog("END AFTER MAINTENANCE FUNCTION");
return ActionResult.Success;
}
#endregion
#region 업그레이드 전 처리하기 - BeforeUpgrade(session)
/// <summary>
/// 업그레이드 전 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult BeforeUpgrade(Session session)
{
_logHelper?.WriteLog("BEGIN BEFORE UPGRADE FUNCTION");
RemoveOutlookProcess();
_logHelper?.WriteLog("END BEFORE UPGRADE FUNCTION");
return ActionResult.Success;
}
#endregion
#region 업그레이드 후 처리하기 - AfterUpgrade(session)
/// <summary>
/// 업그레이드 후 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult AfterUpgrade(Session session)
{
_logHelper?.WriteLog("BEGIN AFTER UPGRADE FUNCTION");
ExecuteOutlookProcess();
_logHelper?.WriteLog("END AFTER UPGRADE FUNCTION");
return ActionResult.Success;
}
#endregion
#region 설치 제거 전 처리하기 - BeforeUninstall(session)
/// <summary>
/// 설치 제거 전 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult BeforeUninstall(Session session)
{
_logHelper?.WriteLog("BEGIN BEFORE UNINSTALL FUNCTION");
RemoveOutlookProcess();
_logHelper?.WriteLog("END BEFORE UNINSTALL FUNCTION");
return ActionResult.Success;
}
#endregion
#region 설치 제거 후 처리하기 - AfterUninstall(session)
/// <summary>
/// 설치 제거 후 처리하기
/// </summary>
/// <param name="session">세션</param>
/// <returns>액션 결과</returns>
[CustomAction]
public static ActionResult AfterUninstall(Session session)
{
_logHelper?.WriteLog("BEGIN AFTER UNINSTALL FUNCTION");
ExecuteOutlookProcess();
_logHelper?.WriteLog("END AFTER UNINSTALL FUNCTION");
return ActionResult.Success;
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Private
#region 아웃룩 프로세스 제거하기 - RemoveOutlookProcess()
/// <summary>
/// 아웃룩 프로세스 제거하기
/// </summary>
/// <returns>처리 결과</returns>
private static bool RemoveOutlookProcess()
{
try
{
Process[] processArray = Process.GetProcessesByName(_outlookProcessName);
if(processArray.Length > 0)
{
foreach(Process process in processArray)
{
process.Kill();
}
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
#endregion
#region 아웃룩 프로세스 실행하기 - ExecuteOutlookProcess()
/// <summary>
/// 아웃룩 프로세스 실행하기
/// </summary>
private static void ExecuteOutlookProcess()
{
try
{
Process.Start(_outlookFileName);
}
catch
{
}
}
#endregion
}
}
■ Advanced Installer 오피스 애드인 프로젝트
※ 버전 1, 버전 2의 대부분 동일하나 경로나 명칭에서 달라질 수 있다.
■ Advanced Installer 업데이트 구성 프로젝트
※ 버전 1(V1.0.0)에 맞춰 버전 2(V1.0.1)도 설정한다.
728x90
반응형
그리드형(광고전용)
'Tool > Advanced Installer' 카테고리의 다른 글
[TOOL/ADVANCED INSTALLER] Outlook VSTO 애드인 설치시 설치 확인 대화 상자 표시 방지하기 (0) | 2021.11.08 |
---|---|
[TOOL/ADVANCED INSTALLER] Outlook VSTO의 FormRegion 등록하기 (0) | 2021.11.04 |
[TOOL/ADVANCED INSTALLER] 프로그램 수정시 MainFeature 숨기기 (0) | 2021.09.17 |
[TOOL/ADVANCED INSTALLER] Visual C++ Redistributable for Visual Studio 설치하기 (0) | 2021.09.17 |
[TOOL/ADVANCED INSTALLER] 관리자 권한으로 설치하기 (0) | 2021.09.17 |
[TOOL/ADVANCED INSTALLER] 설치 디렉토리 변경하기 (0) | 2021.09.17 |
[TOOL/ADVANCED INSTALLER] UI 표시없이 강제 설치하기/업데이트하기 (0) | 2021.01.09 |
[TOOL/ADVANCED INSTALLER] updater.exe 프로그램 : 업데이트 배포하기 (0) | 2021.01.09 |
[TOOL/ADVANCED INSTALLER] updater.exe 프로그램 실행시 업데이트 즉시 반영하기 (0) | 2021.01.09 |
[TOOL/ADVANCED INSTALLER] Advanced Installer를 사용해 설치 프로그램 만들기 (0) | 2020.04.08 |
댓글을 달아 주세요