´Ù. ¼³Ä¡ ÇØÁ¦

´ç±ÙÀº ¼³Ä¡ÇÒ ÇÊ¿ä¾øÀÌ º¹»çÇؼ­ ¹Ù·Î ¾µ ¼ö ÀÖ´Â ´Üµ¶ ½ÇÇàÆÄÀÏÀÌ´Ù. ±×·¯´Ù º¸´Ï ¼³Ä¡ ÇØÁ¦ ÇÁ·Î±×·¥µµ µû·Î Á¦°øÇÏÁö ¾ÊÀ¸¸ç ´ë½Å ½º½º·Î ¼³Ä¡ ÇØÁ¦¸¦ ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. ·¹Áö½ºÆ®¸®¿¡ Á¤º¸°¡ ³²¾Æ À־ º° ¹®Á¦°¡ µÇÁö´Â ¾ÊÀ¸¹Ç·Î ±»ÀÌ ¼³Ä¡ÇØÁ¦¸¦ ÇÒ ÇÊ¿ä°¡ ¾ø´Â °Í °°Àºµ¥ ´Ü ÇÑ °¡Áö bExplorerPopup ¿É¼Ç ¶§¹®¿¡ ¼³Ä¡ ÇØÁ¦ ±â´ÉÀÌ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. Ž»ö±â¿¡ Æ˾÷¸¸ µî·ÏÇسõ°í ½ÇÇàÆÄÀÏÀÌ ¾øÀ¸¸é °ï¶õÇϱ⠶§¹®ÀÌ´Ù.

´ç±Ù »ç¿ëÀÚµéÀÌ ¾²´Ù°¡ ¸¶À½¿¡ ¾Èµé ¶§ ±âº» ¼³Á¤¿¡¼­ ÀÌ ¿É¼ÇÀ» ¸ÕÀú ²ô°í Dangeun.exe¸¦ »èÁ¦ÇÏ¸é ¾Æ¹« ¹®Á¦°¡ ¾øÁö¸¸ ±×·¸Áö ¾Ê±â ¶§¹®¿¡ ¼³Ä¡ ÇØÁ¦ ¸í·ÉÀ» µû·Î Á¦°øÇØ¾ß ÇÑ´Ù. Â÷ÈÄ¿¡ È®ÀåÀÚ ¿¬°á ±â´ÉÀ̳ª ´Ù¸¥ ÇÁ·Î±×·¥ÀÇ Ç÷¯±×ÀÎÀ¸·Î µî·ÏÇÏ´Â µî ½Ã½ºÅÛ¼³Á¤À» º¯°æÇØ¾ß ÇÏ´Â ±â´ÉÀ» À§Çؼ­µµ ¼³Ä¡ ÇØÁ¦ ¸í·ÉÀº ¹Ì¸® ¸¸µé¾î ³õ´Â °ÍÀÌ ÁÁÀ» °Í °°´Ù. OnCommand¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÏ¿© ¼³Ä¡ ÇØÁ¦ ¸í·ÉÀ» ó¸®ÇÑ´Ù.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     case IDM_TOOL_UNINSTALL:

          if (g_ChildNum) {

              MessageBox(g_hFrameWnd, "ÆíÁýâÀÌ ¿­·Á ÀÖ´Â »óÅ¿¡¼­´Â ¼³Ä¡ ÇØÁ¦¸¦"

                   " ÇÒ ¼ö ¾ø½À´Ï´Ù. ¸ðµç ÆíÁýâÀ» ´ÝÀº ÈÄ ´Ù½Ã ½ÇÇàÇØ ÁֽʽÿÀ",

                   "¾Ë¸²",MB_OK);

              return;

          }

          if (DialogBox(g_hInst, MAKEINTRESOURCE(IDD_UNINSTALL), g_hFrameWnd,

              UninstallDlgProc)==IDOK) {

              bUninstall=TRUE;

              DestroyWindow(g_hFrameWnd);

          }

          break;

 

¹®¼­¸¦ ÆíÁýÇÏ°í ÀÖ´Â Áß¿¡´Â ¼³Ä¡ ÇØÁ¦¸¦ ÇÒ ¼ö ¾øµµ·Ï ÇÏ¿´À¸¸ç ¹Ýµå½Ã ¸ðµç ¹®¼­¸¦ ´Ý¾Æ¾ß¸¸ ÀÌ ¸í·ÉÀ» ¾µ ¼ö ÀÖ´Ù. ¹Ìº¸°ü ¹®¼­ ¹®Á¦µµ ÀÖ°Å´Ï¿Í ÀÌ·± Ưº°ÇÑ ±â´ÉÀº Á» ºÒÆíÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ±×·¡¼­ ±ÍÂú°Ô ´ëÈ­»óÀÚ¸¦ ÅëÇØ ÇÑ ¹ø ´õ È®ÀÎÇÑ ÈÄ ¼³Ä¡ ÇØÁ¦¸¦ ÇÑ´Ù. ¼³Ä¡ ÇØÁ¦¸¦ À§ÇÑ ¾È³» ¸Þ½ÃÁö¿Í ÇØÁ¦ ¿É¼Ç ÀÔ·ÂÀ» À§ÇØ ´ÙÀ½ ´ëÈ­»óÀÚ¸¦ ¶ç¿î´Ù.

Ȥ½Ã ½Ç¼ö·Î ÀÌ ¸í·ÉÀ» ¼±ÅÃÇßÀ» ¼öµµ ÀÖÀ¸¹Ç·Î ¼³Ä¡¸¦ ÇØÁ¦ÇÑ´Ù´Â ¸Þ½ÃÁö¸¦ È®½ÇÇÏ°Ô º¸¿©ÁÖ¾ú´Ù. ÇöÀç´Â ¸Þ½ÃÁö¹Û¿¡ ¾øÁö¸¸ Â÷ÈÄ ¹öÀü¿¡¼­´Â ¼³Ä¡ ÇØÁ¦ ¿É¼ÇÀÌ »ý±æ ¼öµµ ÀÖÀ¸¹Ç·Î ´ëÈ­»óÀÚ¸¦ ¸¸µé¾î µÎ¾ú´Ù. ¿¹¸¦ µé¾î ´ç±ÙÀ¸·Î ¸¸µç ¸ÅÅ©·Î ÆÄÀÏÀ̳ª »ó¿ë±¸ ÆÄÀÏ °°Àº °Íµéµµ °°ÀÌ »èÁ¦ÇÒ °ÍÀÎÁö¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ´ëÈ­»óÀÚÀÇ ÇÁ·Î½ÃÀú´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.

 

BOOL CALLBACK UninstallDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage)

     {

     case WM_INITDIALOG:

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))

          {

          case IDOK:

              EndDialog(hDlg,IDOK);

              return TRUE;

          case IDCANCEL:

              EndDialog(hDlg,IDCANCEL);

              return TRUE;

          }

          return FALSE;

     }

     return FALSE;

}

 

ÀÌ ´ëÈ­»óÀÚ¿¡¼­ È®ÀÎ ¹öÆ°À» Ŭ¸¯Çؾ߸¸ ¼³Ä¡ ÇØÁ¦µÈ´Ù. ÀÌ ´ëÈ­»óÀÚ¿¡¼­ IDOK¸¦ ¸®ÅÏÇϸé OnCommand¿¡¼­´Â ¼³Ä¡ ÇØÁ¦ µ¿ÀÛÀ» Çϴµ¥ ¼³Ä¡ ÇØÁ¦´Â ½ÇÇàÁß¿¡ ÇÒ ¼ö ¾øÀ¸¸ç Á¾·á Á÷Àü¿¡ ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é OnDestroy¿¡¼­ ¶Ç ·¹Áö½ºÆ®¸®¿¡ Á¤º¸¸¦ ±â·ÏÇϱ⠶§¹®ÀÌ´Ù. ±×·¡¼­ OnCommand¿¡¼­ ¼³Ä¡ ÇØÁ¦¸¦ Á÷Á¢ ÇÏÁö´Â ¾ÊÀ¸¸ç bUninstallÀ̶ó´Â Àü¿ªº¯¼ö¿¡ ¼³Ä¡ ÇØÁ¦Ç϶ó´Â ½ÅÈ£¸¸ ³²±â°í ¸ÞÀÎ À©µµ¿ì¸¦ Æı«ÇÏ¸é µÈ´Ù. ÀÌ Àü¿ªº¯¼ö´Â ¼±¾ðÇÒ ¶§ FALSE·Î ÃʱâÈ­ÇÏ¿´´Ù.

 

BOOL bUninstall=FALSE;

 

¼³Ä¡ ÇØÁ¦¸¦ ¼±ÅÃÇÒ ¶§¸¸ TRUE°¡ µÇ¸ç ±× ¿ÜÀÇ °æ¿ì´Â Ç×»ó FALSE°ªÀ» À¯ÁöÇÑ´Ù. ÀÌ º¯¼ö°ªÀ» Á¡°ËÇÏ´Â ½ÃÁ¡Àº WinMain¿¡¼­ ¸Þ½ÃÁö ·çÇÁ°¡ ¿ÏÀüÈ÷ Á¾·áµÇ¾úÀ» ¶§ÀÌ´Ù.

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

            ,LPSTR lpszCmdParam,int nCmdShow)

{

     ....

     CoUninitialize();

    if (bUninstall) {

        Uninstall();

    }

     return (int)Message.wParam;

}

 

ÇÁ·Î±×·¥ Á¾·á Á÷Àü¿¡ ÀÌ º¯¼ö°ªÀ» º¸°í Uninstall ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ±×·¡¾ß ¿ÏÀüÇÑ ¼³Ä¡ ÇØÁ¦¸¦ ÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î ¼³Ä¡ÇØÁ¦¸¦ ÇÏ´Â Uninstall ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.

 

void Uninstall()

{

     TCHAR szKey[MAX_PATH];

     TCHAR szPath[MAX_PATH];

     TCHAR szLink[MAX_PATH];

 

     RegisterPopup(FALSE);

     lstrcpy(szKey,KEY);

     szKey[lstrlen(szKey)]=0;

     SHDeleteKey(SHCU,KEY);

 

     MyGetSpecialFolderPath(g_hFrameWnd, CSIDL_DESKTOP, szLink);

     lstrcat(szLink, "\\´ç±Ù.lnk");

     if (_access(szLink,0)==0) {

          DeleteFile(szLink);

     }

 

     MyGetSpecialFolderPath(g_hFrameWnd, CSIDL_PROGRAMS, szPath);

     lstrcat(szPath, "\\´ç±Ù");

     wsprintf(szLink,"%s\\´ç±Ù.lnk",szPath);

     if (_access(szLink,0)==0) {

          DeleteFile(szLink);

          RemoveDirectory(szPath);

     }

}

 

½Ã½ºÅÛ¿¡ º°´Ù¸¥ º¯È­¸¦ ¸¹ÀÌ ¸¸µéÁö ¾Ê¾ÒÀ¸¹Ç·Î ·¹Áö½ºÆ®¸®¸¸ Á¤¸®ÇÏ°í ´ÜÃà ¾ÆÀÌÄܸ¸ »èÁ¦ÇÏ¸é µÈ´Ù. Ž»ö±âÀÇ Æ˾÷¸Þ´º µî·ÏÀº Ãë¼ÒµÇ¸ç ´ç±ÙÀÇ ·¹Áö½ºÆ®¸® ·çƮŰ´Â Åë°·Î »èÁ¦µÇ¾î ¸ðµç ¼³Á¤Á¤º¸¸¦ ÀÒ°Ô µÉ °ÍÀÌ´Ù. ÀÌ ¸í·É ÈÄ Dangeun.exe¸¸ »èÁ¦ÇÏ¸é ¸ðµç Á¤¸®°¡ ³¡³­´Ù.

¼³Ä¡ ÇØÁ¦ ¸í·ÉÀ» ÇÁ·Î±×·¥ ÀÚ½ÅÀÌ Á¦°øÇϴµ¥ ´ëÇؼ­ º£Å¸ Å×½ºÅ͵鿡°Ô ¸¹Àº °ÇÀǸ¦ ¹ÞÀº¹Ù ÀÖÀ¸¸ç ³ª ½º½º·Îµµ ÀÌ ¸í·ÉÀÌ ¹«Ã´ ¾î»öÇÏ´Ù´Â °ÍÀ» ÀÎÁ¤ÇÑ´Ù. ´ç±ÙÀÌ ¼³Ä¡ ÇØÁ¦¸¦ Á÷Á¢ Áö¿øÇØ¾ß ÇÏ´Â ´çÀ§¼º Áß Çϳª´Â ¿øÈ°ÇÑ Å×½ºÆ®¸¦ À§Çؼ­ÀÌ´Ù. ¿É¼ÇµéÀÌ Á¦´ë·Î Àû¿ëµÇ´ÂÁö, ÃʱâÈ­°¡ Á¦´ë·Î µÇ´ÂÁö¸¦ Å×½ºÆ®Çغ¸·Á¸é ·¹Áö½ºÆ®¸®¸¦ ±ò²ûÇÏ°Ô Áö¿î ÈÄ ´Ù½Ã ½ÇÇàÇØ¾ß Çϴµ¥ ¸Å¹ø ·¹Áö½ºÆ®¸® ÆíÁý±â¸¦ ¿­±â´Â ³Ê¹« ±ÍÂú±â ¶§¹®ÀÌ´Ù. ±×·¡¼­ ¿¹Á¦¿¡ ¾Æ¿¹ ÀÚ½ÅÀÇ ·¹Áö½ºÆ®¸® Å°¸¦ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» ³ÖÀº °ÍÀÌ´Ù.

¹°·Ð ÀÌ·± ¸ñÀûÀ̶ó¸é ºÐ¸®µÈ DgUninstall.exe¸¦ Á¦°øÇÒ ¼öµµ ÀÖÀ¸¸ç ´ÙÀ½ ¹öÀü¿¡¼­´Â ±×·¸°Ô ÇÒ Áöµµ ¸ð¸¥´Ù. ´ç±ÙÀÌ ¼³Ä¡ ´ëÈ­»óÀÚ¿Í ¼³Ä¡ ÇØÁ¦ ¸í·ÉÀ» Á¦°øÇØ¾ß ÇÏ´Â °¡Àå ±Ùº»ÀûÀÎ ÀÌÀ¯´Â ´Üµ¶ ½ÇÇàÆÄÀÏÀ̱⠶§¹®ÀÌ´Ù. ¼³Ä¡ °úÁ¤ÀÌ ÇÊ¿ä¾øµµ·Ï ¸¸µé±â À§ÇØ ÀÌ·± ¾î»öÇÑ Äڵ带 ÀÛ¼ºÇÏ°Ô µÇ¾ú´Âµ¥ Àû¾îµµ 1.0¹öÀü¿¡¼­´Â ÀÌ ¼³°è ¿øÄ¢À» ¹Ýµå½Ã Áöų °ÍÀÌ´Ù. ³ª´Â ¼³Ä¡Çؾ߸¸ ¾µ ¼ö ÀÖ´Â À¯Æ¿¸®Æ¼°¡ ½È´Ù.