본 자료는
1. SmartUpdate 처리 방식
[CASE-1] 프로그램이 실행되면서 업데이트를 처리
[CASE-2] 항상 외부저장장치(SD Card, USB Memory)의 인식 결과에 따른 업데이트 처리
2. Flow Chart
3. 예제 프로그램
순서로 진행합니다.
- 프로그램 시작 시 최초로 한 번만 외부저장장치를 감지하고 마운트 되었을 때 사용자가 지정한 경로의 폴더가 있는지 확인하고 업데이트를 시작합니다.
- 프로그램을 시작하고 외부저장장치를 인식(마운트)하기까지의 지연 시간이 생기는 문제점이 있습니다. 그렇기 때문에 타이머를 이용하여 외부저장장치의 감지를 해제해야 합니다. 적용하는 프로그램의 용량과 Fat File System의 단편화로
인해 지연 시간이 달라지기 때문에 사용자가 적절하게 Timer의 interval값을 설정해야 합니다.
private void Form1_Load(object sender, EventArgs e)
{
// 외부저장장치 연결 감지 시작
smartMemory1.ExtStorageDetectionStart();
// 본 예제에서는 15초로 설정하였고 사용하실 때에는 프로그램에 맞춰 최적값으로 설정하여 사용
smartTimer1.Interval = 15000;
smartTimer1.Start();
private void smartTimer1_Tick(object sender, EventArgs e)
{
// 외부저장장치 연결 감지를 종료
smartMemory1.ExtStorageDetectionStop();
smartTimer1.Stop();
private void smartMemory1_EvtExternalStorageAttached(bool bAttached, string strDeviceName)
{
if (bAttached == true)
{
smartMemory1.ExtStorageDetectionStop();
if (smartTimer1.IsStart == true)
{
// 업데이트 진행
UpdateCheckApply(strDeviceName);
private void UpdateCheckApply(string strDeviceName)
{
bool bExist = System.IO.Directory.Exists(strDeviceName + "\\UpdateFiles");
if (bExist == true)
{
smartUpdate1.FromFilePath = strDeviceName + "\\UpdateFiles";
// 업데이트 대상 경로 설정
smartUpdate1.ToFilePath = "Flash Disk\\Run";
// 업데이트 후 프로그램 재시작
smartUpdate1.Restart = SmartX.SmartUpdate.RESTARTFLAG.AUTORUNEXECUTE;
// 응용 프로그램이 종료된 후 업데이트 모듈이 업데이트를 시작하기까지의 지연 시간을 설정함
// 응용 프로그램의 용량 등(프로그램 복잡도)에 따라서 종료되는 지연 시간을 감안하여
// Interval을 충분한 값으로 설정하시기 바랍니다. (단위 : ms)
smartUpdate1.UpdateStartInterval = 3000;
// 업데이트 파일을 확인하며 업데이트할 파일이 있을 경우 업데이트 시작
// 리턴값 : 업데이트할 파일이 있는 경우 true, 업데이트할 파일이 없는 경우 false
if (smartUpdate1.UpdateCheck() == true)
{
if (dResult == DialogResult.Yes)
{
smartForm1.Close();
[CASE-2] 항상 외부저장장치(SD Card, USB Memory)의 인식 결과에 따른 업데이트 처리
- 프로그램 시작 시 항상 외부저장장치를 감지하고 마운트 되었을 때 사용자가 지정한 경로의 폴더가 있는지 확인하고 업데이트를 시작합니다.
- 프로그램을 재실행하지 않아도 업데이트가 가능합니다.
private void Form1_Load(object sender, EventArgs e)
{
// 외부저장장치 연결 감지 시작
smartMemory1.ExtStorageDetectionStart();
private void smartMemory1_EvtExternalStorageAttached(bool bAttached, string strDeviceName)
{
if (bAttached == true)
{
UpdateCheckApply(strDeviceName);
private void UpdateCheckApply(string strDeviceName)
{
bool bExist = System.IO.Directory.Exists(strDeviceName + "\\UpdateFiles");
if (bExist == true)
{
smartUpdate1.FromFilePath = strDeviceName + "\\UpdateFiles";
// 업데이트 대상 경로 설정
smartUpdate1.ToFilePath = "Flash Disk\\Run";
// 업데이트 후 프로그램 재시작
smartUpdate1.Restart = SmartX.SmartUpdate.RESTARTFLAG.AUTORUNEXECUTE;
// 응용 프로그램이 종료된 후 업데이트 모듈이 업데이트를 시작하기까지의 지연 시간을 설정함
// 응용 프로그램의 용량 등(프로그램 복잡도)에 따라서 종료되는 지연 시간을 감안하여
// Interval을 충분한 값으로 설정하시기 바랍니다. (단위 : ms)
smartUpdate1.UpdateStartInterval = 3000;
// 업데이트 파일을 확인하며 업데이트할 파일이 있을 경우 업데이트 시작
// 리턴값 : 업데이트할 파일이 있는 경우 true, 업데이트할 파일이 없는 경우 false
if (smartUpdate1.UpdateCheck() == true)
{
if (dr == DialogResult.Yes)
{
smartForm1.Close();
2. FLow Chart
아래의 Flow Chart는 [CASE-1]과 [CASE-2]의 전체적인 흐름을 나타낸 그림입니다. [CASE-1]과 [CASE-2]의 차이점은 [CASE-1]에 외부저장장치 연결 감지를 프로그램 실행시에만 수행하기 위해 감지 종료를 위한 타이머 관련 기능이 있고 감지 이벤트가 발생하면 감지를 바로 종료하는 차이점이 있습니다.
프로그램을 구성하실 때 아래 Flow Chart를 확인하시고 구성하시기 바랍니다.
3. 예제 프로그램
- 프로그램 시작 시 Option.ini 파일의 설정값을 읽어서 업데이트 방식을 정합니다.
- 설정된 값이 없다면 업데이트 설정 버튼을 눌러 SettingForm을 열고 원하는 방식을 선택 후 적용을 눌러 설정을 완료합니다.
① : 업데이트 설정 버튼을 클릭하여 다이얼로그 창 열기
② : 원하는 방식을 선택한 후 적용을 눌러 설정 완료하기