헬마입니다.

오랜만에 AutoIt 도움말 작업했습니다.

F 로 시작하는 몇개 안되는 함수들 번역이 끝났습니다.



댓글을 달아 주세요

  1. jucke 2009.08.14 15:37 Address Modify/Delete Reply

    감사합니다. 잘 쓰겠습니다. ^^

  2. BlogIcon 삼각형 2009.08.15 13:28 Address Modify/Delete Reply

    요즘 안올라와서 걱정했는데
    역시 하고 계셨군요.

    언제나 감사합니다.

  3. 티티카카 2009.08.16 11:31 Address Modify/Delete Reply

    수고하셨습니다. 잘 쓸께요.

  4. BlogIcon H e l l o 2009.08.20 18:48 신고 Address Modify/Delete Reply

    혹시..강좌같은거 부탁드려도 될까요..
    winrar ++ 이제 안만드시는거같은데..
    제가 만들어서라도 쓰고싶네요..훗훙

  5. 냉파천 2009.08.22 16:11 Address Modify/Delete Reply

    저 헬마님 네이트온 패치는 더이상 다운 받을수 없는건가요?
    3.7.10 버젼을 자주 쓰는데 빌드 패치가 사라진거 같아서 ㅠㅠ

  6. 박동범 2009.09.09 20:10 Address Modify/Delete Reply

    이런 유용한 정보 많은 사이트는 드가면 구글광고 꼭있던데 그거 반드시 눌러주거든요..

    그거 눌러주면 사이트 운영자한테 돈간담서요... 그래서 꼭 눌러주는데

    이사이트는 왼쪽버튼 연타로 눌러야 할듯한 유용한 정보가 많네요..

    구글 광고 다세요.. 만땅 눌러드리께욧!

    • BlogIcon 헬마 2009.09.10 21:15 신고 Address Modify/Delete

      구글 눌러주신다는 듣기에 매우 감사드려요. ^^

      제가 달아볼려고 했는데 참 이상하게 머가 꼬였는지 구글 계정으로 애드센스 확인이 안대서 거진 반 포기상태입니다. ^^

  7. test 2009.09.21 14:07 Address Modify/Delete Reply

    다운로드 받은 후 실행하면 트리만 나오고 알맹이는 없는데요? 어떻게 사용하나요?

    • 헬마 2009.09.26 23:11 Address Modify/Delete

      레지를 수정하니까 되네요.안되시는분 참조하십시오.
      시작->실행->regedit
      과거 댓글에서 가져왔습니다.
      ------------------------------

      HKey_Local_Machine\Software\Microsoft\HTMLHelp\1.x\

      ItssRestrictions키를 만든다.

      dword값을 만들고 MaxAllowedZone 이름변경/값을 3으로 변경한다.

  8. 감사 2009.09.26 00:13 Address Modify/Delete Reply

    저도 다운받으면 트리만 나오고 내용은 페이지를 찾을수 없다, 잘못된 주소다 나옵니다.
    chm 빌드가 잘못되신듯..^^;

    • 헬마 2009.09.26 23:09 Address Modify/Delete

      인터넷 익스플로러의 인터넷 옵션에서 내려받은 active 컨텐트 관련하여 인증서 없는 것은 차단하도록 설정되어있어서 그렇습니다. auto it 관련 게시물의 다른 댓글들을 보시면 해제하는 방법이 있습니다.

헬마입니다.

저번에 간단한 스샷으로 올렸던 통합과정을 좀 더 정리해서 머릿속으로 정리가 되어 이렇게 글을 남겨봅니다.

본 제작과정은 MSI 라는 윈도 인스톨러의 관리자 설치기능을 이용한 것입니다. 따라서 관리자 설치기능과 MSP 의 MSI에 대한 통합을 지원하지 않는 패치파일등은 통합을 할 수 없습니다.

* 이 통합과정은 Visual C++ 을 사용하시는 분들을 위주로 하여 테스트 되었습니다. *

준비물
먼저 Visual Studio 2008 Team Suite ISO 파일과 Visual Studio 2008 SP1 ISO 파일을 구합니다.

이번에 제작과정에서는 2가지 모두 한글판을 기준으로 작업하겠습니다.

작업드라이브는 대략 10기가 정도의 여유공간을 준비하시는 것이 편하십니다.

작업드라이브는 D 드라이브, 가상 시디롬 드라이브는 E 드라이브로 가정하여 진행하겠습니다. ^^

- 먼저 D 드라이브에 VS2008SP1KOR 이라는 기준폴더를 생성하고 가상 시디롬 드라이브에 VS2008 ISO 파일을 마운트합니다.
- 이제 작업의 동반자가 될 명령행 프롬프트 창을 열어둡니다. 검은 바탕의 이 화면은 참으로 언제나 요긴한 것 같네요.

통합하기

-
먼저, 가상 시디롬 드라이브로 이동하여 아래와 같은 명령을 입력하여 기준폴더에 VS2008 에 대한 관리자 설치 이미지를 생성합니다.
= msiexec /a vs_setup.msi TARGETDIR=D:\VS2008SP1KOR

그러면 위와 같은 화면이 나타나고 한참 후에 기준 폴더에 관리자 설치이미지가 생성됩니다.  ( 대략 5-10분 소요됩니다 )

- 이젠, 원본 ISO 파일은 필요가 없습니다. Service Pack 1 ISO 파일을 마운트합니다.
= 먼저, MSP 파일을 통합하기전에 간단한 파일 복사 작업을 해야합니다. 서비스팩 1 의 MSP 파일은 관리자 설치이미지에서 특정위치에서 특정 파일을 찾는데, 실제 파일이 그 위치에 있지 않습니다. ㅠㅠ 그래서 그 파일을 찾아서 원하는 위치에 복사해놓아야합니다. 
* copy "d:\vs2008sp1kor\program files\microsoft visual studio 9.0\common7\1042\WcfSvcHost.chm" "d:\vs2008sp1kor\program files\microsoft visual studio 9.0\common7\ide"
* copy "d:\vs2008sp1kor\program files\microsoft visual studio 9.0\common7\1042\WcfTestClient.chm" "d:\vs2008sp1kor\program files\microsoft visual studio 9.0\common7\ide"

= 일단, 통합이 가능한 중요 MSP 파일을 관리자 설치이미지의 vs_setup.msi 파일에 통합시킵니다. ( 각 명령마다 제일 처음 스샷과 같은 화면이 뜨며 진행상황을 안내합니다 )
* msiexec /a d:\vs2008sp1kor\vs_setup.msi /p e:\vs90sp1\vs90sp1-kb945140-x86-kor.msp /L*vx d:\Vs2008sp1kor\vs90sp1-kb945140-x86-kor.log
* msiexec /a d:\vs2008sp1kor\vs_setup.msi /p e:\vs90sp1\vc90sp1-kb947888-x86-kor.msp /L*vx d:\vs2008sp1kor\vc90sp1-kb947888-x86-kor.log
* msiexec /a d:\vs2008sp1kor\vs_Setup.msi /p e:\vs90sp1\vc90sp1-kb948484-x86_x64-kor.msp /L*vx d:\vs2008sp1kor\vc90sp1-948484-x86_x64-kor.log
* msiexec /a d:\vs2008sp1kor\vs_setup.msi /p e:\vs90sp1\vc90sp1-kb948560-x86_IA64-kor.msp /L*vx d:\vs2008sp1kor\vc90sp1-kb948560-x86_IA64-kor.log

= 이제 설치 데이터베이스 파일을 SP1 이 적용된 설치데이터베이스 파일로 교체해야합니다. 그런데, 왠일인지 MSP 파일을 통합하면서 MS 가 SP1 이 적용된 설치데이터베이스 파일을 자동으로 생성해 둔것이 있습니다. 따라서, 이 파일들을 이용합니다.
* d:\vs2008sp1kor\setup\setup.sdb 파일을 열면 중간쯤에 productkey 라는 부분이 있고 이곳에 시디키가 기록되어있습니다. 이 시디키를 다른곳에 적어둡니다.
* copy "d:\vs2008sp1kor\program files\microsoft visual studio 9.0\CSetupMM\*.*" "D:\vs2008sp1kor\setup"

= 닷넷 프레임워크 3.5 서비스팩 1 이 설치될 수 있도록 파일을 교체합니다 .
* WinRAR 등을 이용하여 서비스팩 1 에 동봉된 dotnetfx35.exe 의 압축을 해제합니다. ( 또는 /extract 옵션을 이용하여 해제합니다 )
* 압축을 해제한 닷넷 프레임워크 3.5 서비스팩 1의 설치파일을 dotNetFramework 라는 디렉토리 그대로 d:\vs2008sp1kor\wcu\dotNetFramework 에 덮어씌웁니다
* copy e:\vs90sp1\dotnetfx35langpack_x86ko.exe d:\vs2008sp1kor\wcu\dotnetframework\dotnetfx35\x86
* copy e:\vs90sp1\dotnetfx35langpack_x64ko.exe d:\vs2008sp1kor\wcu\dotnetframework\dotnetfx35\x64

= Visual C++ 2008 SP1 Runtimes 가 설치될 수 있도록 구성합니다.
* md d:\vs2008sp1kor\wcu\VCRuntimes
* copy e:\vs90sp1\vc_ia64runtime.exe D:\vs2008sp1kor\wcu\VCRuntimes
* copy e:\vs90sp1\vc_x64runtime.exe d:\vs2008sp1kor\wcu\VCRuntimes
* copy e:\vs90sp1\vc_x86runtime.exe d:\vs2008sp1kor\wcu\VCRuntimes

= Microsoft SQL Server Database Publishing Wizard 1.3 를 구성합니다. 
*  wcu\SQLPub 라는 폴더에 서비스팩 ISO 에서 SqlPubWizInstaller.exe 파일을 복사합니다. 
=  Microsoft SQL Server 2008 Management Objects 와 SQL Server System CLR Types 를 구성합니다.
* wcu\SMO 라는 폴더를 생성 후 서비스팩 ISO 에서 SharedManagementObjects.msi, SQLSysClrTypes.msi 파일을 복사합니다. 
=  Microsoft SQL Server Compact 3.5 SP1 English 와 Microsoft SQL Server Compact 3.5 SP1 Design Tools English 를 구성합니다. 
* wcu\SSCE 라는 폴더에 SSCERuntime-enu.msi, SSCEVSTools-enu.msi 파일을 덮어씌웁니다.

 = 모든 통합과정이 끝났습니다. 이제 서비스팩 ISO 파일에서 지금까지 통합에 사용한 파일들( MSP, MSI, EXE ) 은 삭제하시고 사용하시면 됩니다.

부족한 재주로 설명하여서 많이 부족합니다. 의문나는 점이 있으면 댓글 달아주시면 답변 드리겠습니다. ^^

댓글을 달아 주세요

  1. 섭잉 2009.08.10 21:27 Address Modify/Delete Reply

    안녕하세요. 몇 가지 궁금증이 있어 글 남깁니다.
    우선 좋은 팁 감사합니다.
    통합하지 않은 WinSDK-KB946729.msp나 VS90sp1-KB945140-X64-KOR.msp 등은
    따로 설치해야 하는 거에요? 두번째꺼는 64비트 전용인가;;

    그리고 통합한 것을 다시 압축, msdn sp1도 포함하여 이미지 파일(iso)로 만들어 사용하려는데 이건 어떻게 하는겁니까?

    그럼 좋은 하루되세요. 덕분에 좋은 정보 얻고 갑니다.

    • BlogIcon 헬마 2009.08.11 20:46 신고 Address Modify/Delete

      네 통합하지 않은 것들은 따로 SP1Installer.exe 를 통해 설치합니다. 즉, 설치과정상으로는 여전히 2번의 설치를 해야하지만 설치 시간은 대폭 줄이는 형태입니다.

      ISO 로 제작하는 것은 MS도구인 cdimage 또는 UltraISO 등을 통해서 ISO파일로 제작하시면 됩니다.

  2. BlogIcon 상현넘™ 2009.09.04 08:23 Address Modify/Delete Reply

    좋은 내용 감사합니다.
    설치시간을 확실히 줄일수 있겠네요..
    통합DVD만들어 놓고 다음 포멧시 한번 해봐야 겠습니다.
    그리고 내용 좀 제 블로그에 퍼가도 될까요??
    출처는 꼭 남기도록 하겠습니다.

  3. BlogIcon 상현넘™ 2009.09.05 09:36 Address Modify/Delete Reply

    안녕하세요!!~~
    또 글을 남기네요..
    위 방법처럼 통합을 하고 설치를 해보았습니다.
    설치 잘되네요^^ 근데 마지막 로그에 보면 Microsoft SQL Server Database Publishing Wizard 1.3 구성 설치에 실패를 했다고 나오네요!!
    그냥 파일 복사만 해 놓으면 되는게 아닌지요??

    그리고 SP1에 있는 사용한 파일들( MSP, MSI, EXE )을 삭제하고 SP1Installer.exe 를 실행시켜 나머지 SP1 파일을 설치하려고 하는데요..
    설치를 시작하면 다음으로 넘어가질 않네요!!
    혹시 SP1 에서 파일 삭제 후 설정을 해줘야 하는 항목이 존재를 하나요??

    시간될때 답변 좀 부탁드립니다^^

    • BlogIcon 헬마 2009.09.06 01:05 신고 Address Modify/Delete

      먼저, 설치로그에 SQL Server 관련 설치가 실패했다고 나오는 것은 비주얼 스튜디오 설치관리자가 정확히 인식하지 못해서 입니다. 제어판에 추가/삭제에 보시면 정확히 설치되어 있는 것을 보실 수 있습니다.

      저는 SP1Installer.exe 를 실행시키면 webDesigner_Core 등 몇가리를 5분정도로 빠르게 설치 후 모든 과정이 종료도비니다. Sp1 에 나머지 파일들의 목록이라던지, 어떻게 진행이 되지 않는지 스샷등으로 혹시 확인할 수 있나요?

    • BlogIcon 헬마 2009.09.06 01:17 신고 Address Modify/Delete

      아래 파일 목록은 제가 통합과정을 끝낸 후 SP1 설치관리자 쪽에 남은 파일 목록입니다. ^^

      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\1033
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\1042
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\DHtmlHeader.html
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\DTE90SP1-KB950425-ENU.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\header.bmp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\list.txt
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\ParameterInfo.xml
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\SPInstaller.exe
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\SPInstallerEngine.dll
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\SPInstallerUi.dll
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\SqlPubWizInstaller.exe
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\sqmapi.dll
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\TEMP
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\UiInfo.xml
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\VS90sp1-KB945140-IA64-ENU.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\VS90sp1-KB945140-X64-ENU.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\vstor30sp1-KB949258-x86.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\watermark.bmp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\WebDesignerCore_KB945140.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\WebDesignerCore_KB950278.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\WinSDK-KB946729.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\WinSDK-KB946733-enu.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\WinSDK-KB950424.msp
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\1033\eula.rtf
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\1033\LocalizedData.xml
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\1033\SPInstallerResources.dll
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\1042\eula.rtf
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\1042\SPInstallerResources.dll
      D:\VS2008SP1ENU\Extra SP1 Files\vs90sp1\TEMP\ParameterInfo.xml

  4. BlogIcon 상현넘™ 2009.09.10 20:28 신고 Address Modify/Delete Reply

    안녕하세요!!
    답변 감사합니다. SQL 부분은 말씀대로 설치가 되어 있네요^^

    그리고 통합 후 SP1 폴더에서 통합한 파일을 제거한 목록은 아래 이미지와 같습니다.
    https://t1.daumcdn.net/cfile/tistory/1507B8234AA8E14C16

    또한 SPInstaller.exe 를 실행 시키면 영향을 받는 제품 목록이 나오고 다음 버튼을 누르고 동의를 하고 다시 다음으로 가면 아래와 같은 이미지처럼 나옵니다.
    https://t1.daumcdn.net/cfile/tistory/1178A01F4AA8E1D162

    위 이미지를 보면 다운로드 하는데 처음에는 2시간이 걸린다고 하더니 조금 지나니 한시간30분이 걸린다고 하네요..
    예전에는 아에 다운로드도 안하고 10분이 넘도록 지나도 아무 반응이 없었는데요!!
    뭐가 문제일까요??

    • BlogIcon 헬마 2009.09.10 21:14 신고 Address Modify/Delete

      음.. 받으신 SP1 설치관리자가 웹 설치관리자가 아닐까 합니. ^^

      제 네이트온(jgh0721@nate.com) 으로 연락주시면 제가 가진 SP1 부분을 압축하여 드리곘습니다. ^^


헬마입니다.

저는 상당히 윈도를 자주 재설치하는편입니다.

백신등을 쓰지 않는 관계로 OS가 조금만 이상하다 싶으면 재설치하는 일이 일상다반사인데요.

회사내에서도 OS재설치 자주하기로 유명할 정도입니다. ^^

그러다보니 비주얼 스튜디오 2008 을 설치하고 다시 서비스팩 1을 설치해야하는데 이 서비스팩 설치 시간이 스튜디오를 설치하는 시간과 거의 비슷한 지경입니다.

해서 비주얼 스듀디오 2005 때처럼 어떻게든 통합을 해보려 했지만, 비쥬얼 스튜디오 제작팀내에서도 완전 통합설치는 지원하지 않는다는 답변만 걸려있더군요.

그래도, 일단, 최소한 설치시간이 제일 오래 걸리는 닷넷 프레임워크 3.5SP1 이라도 같이 설치되게 해보자 라는 심정으로 노력하여 어느정도 성과를 거두었습니다 ㅠㅠ

일단 VC++ 을 서비스팩 1 이 설치된 상태로 설치하는데으는 성공한 듯 하네요.


VM웨어에 설치하는 모습입니다. 설치떄부터 SP1 이 설치되고 있지요. 위에 나타나는 배너등은 이미지라서 수정하지 않았습니다. ^^ 수정할 능력도 없어요 ^^

사실 이 통합작업을 수행한 또다른 이유는 이렇게 하면 SP1 이후로 발표된 수백메가나 되는 여러개의 핫픽스들도 통합할 수 있기때문입니다.

몇가지 작업나 테스트를 해본 후에 이미지 또는 제작 방법을 공개하겠습니다. ^^

댓글을 달아 주세요


헬마입니다.

오늘 당직이라 회사에 나와서 멀뚱히 있다가 , 갑자기 EmEditor 용 플러그인이 만들고 싶어지더군요.

그래서 문득 생각난 것이 사전 플러그인입니다.

커서위치의 단어를 인식해서 사전 풀이를 보여주면 괜찮을 듯 싶더군요.

나름 텍스트 문서도 번역하는 일이 많은데 그때마다 사전 찾는것이 굉장히 귀찮으니까요. ㅠㅠ

그래서 EmEditor 플러그인 도움말을 보니 그리 어렵지 않은듯 싶더군요.

처음에는 Naver OpenAPI 를 염두에 두고 커서 위치에서 툴팁으로 보여주려 했습니다.

하지만, 이상하게 Naver Open API 키 값도 정상적으로 받았음에도 불구하고 결과값이 제대로 나오지 않는데다 7월 31일부로 사전의 Open API가 종료된다는 소식에 꿈을 접었습니다.

HTML 을 파싱해서 툴팁으로 보여주려했는데 스크립트 떡칠 HTML이라 파싱할 엄두도 안나더군요.

몇시간을 고민하다가 Outline 플러그인처럼 일단 옆에다 보여주자 해서 이렇게 대충 가닥은 잡히게 되었네요.

며칠 좀 다듬으면 꽤 쓸만해질듯 합니다. ^^


댓글을 달아 주세요

  1. BlogIcon 헬마 2009.07.25 20:51 신고 Address Modify/Delete Reply

    이거 아이콘 제작해주실분 찾아요~~ ㅠㅠ 제가 UI 들어가는건 완전 꽝이라..

    누가 이쁘게 제작해주시길 ... (__)


헬마입니다.

며칠전에 방명록에서 관련 질문을 받고 써야지 하다가 게으름에 이제서야 글을 쓰게 되었습니다.

사실 코드는 굉장히 단순하구요.

사용자 정의 대화상자를 만들어서 체크박스 등을 통해 선택받는 방법은 2가지가 있습니다.

NSIS 2 초기에 사용되었던 INI 파일을 이용한 InstallOptions 라는 플러그인을 이용하는 방법이 첫째입니다.

둘째는, 비교적 최근 버전의 NSIS에 도입된 nsDialogs 플러그인을 이용하는 방법입니다.

후자의 방법이 속도도 훨씬 빠르며, 유연합니다. 또한, 더욱 여러가지 원하는 대로 통제도 가능하지요. 하지만, 그런만큼 윈도 프로그래밍의 지식을 갖추지 않으면 어렵습니다.

이번에 예제는 후자인 nsDialogs 플러그인을 사용하도록 작성했습니다.

작성 NSIS 버전은 2.45 버전입니다.

예제 테스트 방법은 NSIS 폴더에 넣고 컴파일 후 실행하여 보시면 됩니다.


컴파일 후에 실행하면 위와 같은 화면이 나오며, 선택하면 선택한 단축아이콘이 바탕화면에 생성됩니다.



!include LogicLib.nsh
!include nsDialogs.nsh

Name 'NSIS_EX'
OutFile 'Nsis_ex.exe'
XPStyle on

Page custom nsDialogEnter nsDialogLeave
Page instfiles

Var hMainDlg
Var hCheckBox1
Var hCheckBox2
Var CheckState

Section -
SectionEnd

Function nsDialogEnter
	nsDialogs::Create 1018
	Pop $hMainDlg
	
	${If} $hMainDlg == error
		Abort
	${EndIf}
	
	${NSD_CreateCheckBox} 0 0 100% 12u 'MakeNSISW.EXE 단축아이콘 생성'
	Pop $hCheckBox1
	
	${NSD_CreateCheckBox} 0 14u 100% 12u 'NSIS.EXE 단축아이콘 생성'
	Pop $hCheckBox2
	
	${NSD_SetState} $hCheckBox1 ${BST_CHECKED}
	nsDialogs::Show
	
FunctionEnd

Function nsDialogLeave
	${NSD_GetState} $hCheckBox1 $CheckState
	${If} $CheckState == ${BST_CHECKED}
		MessageBox MB_OK 'MakeNSISW 단축아이콘을 생성합니다.'
		CreateShortCut '$DESKTOP\MakeNSISW.LNK' '$EXEDIR\MakeNsisw.exe'
	${EndIf}
	
	${NSD_GetState} $hCheckBox2 $CheckState
	${If} $CheckState == ${BST_CHECKED}
		MessageBox MB_OK 'Nsis 단축아이콘 생성'
		CreateShortCut '$DESKTOP\nsis.exe' '$EXEDIR\nsis.exe'
	${EndIf}	
FunctionEnd

댓글을 달아 주세요

  1. BlogIcon enemy 2011.05.11 16:15 Address Modify/Delete Reply

    하나 알고 갑니다.^^
    감사 드립니다.

  2. BlogIcon 지우 초이 2016.03.24 12:13 신고 Address Modify/Delete Reply

    nsdialog설명중에서 가장 간단하면서도 가장 명쾌합니다.
    왜쓰는지, 어떻게쓰는지 완벽히 이해하고갑니다!

헬마입니다.

얼마전부터 프로젝트에 사용할 사칙연산 계산기를 이리저리 찾아보다가 인터넷에서 적당한 넘을 하나 구했는데 기능이 많이 부족하더군요.

계산기 원소느는 구한지 몇개월이 지난거라 어디서 받았는지도 기억이 안나네요.. 원저자분이 누구셨는지 참으로 죄송합니다.

그래서 이리저리 뜯어보고 기능을 싸그리 고쳤습니다.

원 버전은 사칙연산, 연산자 우선순위, 괄호 지원까지 였는데 변수 라는 개념이나 기타 등등 도입해봤습니다.

그런데 만들어놓고 보니 코드가 좀 난잡해진거 같아서 코드 최적화랄까 기능 건의 라던가 필요할거 같아서 테스트 용으로 올려봅니다. ^^

간단한 사용법

1. 한번에 여러문장을 계산할 수 있으며 각 문장의 끝은 ; 로 구분하며, 이전문장에 변수에 값을 대입하면 다음 문장에서 그 변수의 값을 꺼내사용할 수 있습니다.
2. 변수의 값들은 Clear~ 함수를 사용하기전까지 유지됩니다.
3. 변수에 숫자의 벡터를 넣어 계산할 수 있습니다.

좀 더 빠르게, 최적화 방안이라던가, 기능 건의 있으면 댓글 달아주세요 ^^ 아직 만들다 만거라서 부족한 점이 많습니다.

#include "Calc.h"

int main( int argc, wchar_t* argv[] )
{
    CCalculator ccalc;
    // 값을 계산하여 a 라는 변수에 저장하고, 결과를 반환합니다. 
    vecVariables result = ccalc.GetResult( ccalc.GetPostfixExp( "a = 3*4 + (2+3);" ) );

    // c 라는 변수를 계산기 내에 설정합니다. 
    vecVariables vecTemp;
    vecTemp.push_back( 2.3 );
    vecTemp.push_back( 3.3 );
    ccalc.SetVariable( "c", vecTemp );

    // 변수 a 와 c 를 더한 결과를 반환합니다. 
    result = ccalc.GetResult( ccalc.GetPostfixExp( "a + c;" ) );

    return 0;
}

댓글을 달아 주세요

  1. BlogIcon 브레아 2009.07.17 21:33 신고 Address Modify/Delete Reply

    헬마님~ 헬마님의 Winrar ++ 리팩버전 잘 이용하고있었는데, 요세 usb로 윈도우 다시깔기를 연습하면서
    날려먹었는데, 헬마님 홈페이지에없어졋네요. 혹시 예전꺼 백업한거있으시면 보내주시면 고맙겠습니다.
    메일 주소는 eroneko@naver.com 입니다.


헬마입니다.  

 오늘 우편함을 확인해보니 NSIS 에 관한 질문 우편이 왔더군요.

 제목이 단지 "헬마님" 이길래 처음에는 흔한 스팸인줄 알았습니다.

 최근들어 이상하게 스팸이 자주와서 곤란을 겪고 있거든요..

 그래서 내용을 보기도 전에 삭제키를 누르려다가 그래도 스팸 내용이나 한번 봐보자 하다가 스팸이 아니라는것을 알았습니다. ^^

 질문 내용을 보니 처음에 NSIS 를 익히시는 많은 분들의 고민이 그대로 있는거 같아서 이렇게 게시물로 올려보게되었습니다.

 -----

 NSIS 는 설치관리자입니다. 설치관리자의 가장 주된 역할은 간단히 말하면 파일을 가지고 있다가 다른 컴퓨터에 파일을 설치하는 것 이라고 할 수 있죠.

 그런데, NSIS 명령들을 쭉 살펴봐도 겉보기에는 파일을 가져오는 명령은 있는데 설치하는 명령은 보이질 않습니다.

 난감하지요. ^^ 그거 옆구리만 긁적 긁적 긁게되는데요.

 핵심은 딱 2개의 명령어로 이루어져 있습니다.

 하나는 SetOutPath 와 또 하나는 File 명령어 입니다.
 
 먼저는 SetOutPath 는 가지고 있는 파일들이 설치될 장소를 지정합니다.
 설치할 장소가 변경될 때마다 새로 지정해야하는 것은 당연하겠죠? ^^

 이제 제일 중요한 File 명령입니다.
 겉보기에는 이는 단지 설치관리자 제작 컴퓨터에서 파일을 가져오기만 하는 명령어로 보입니다.
 하지만, 이 명령어는 2가지 역할을 합니다.
 첫째, 컴파일시에는 설치관리자로 파일을 가져오는 역할 입니다.
 둘째, 스크립트가 실행될 때는 지정된 파일을 SetOutPath 에 지정된 폴더로 설치하는 역할입니다.

 이렇게 2가지 명령어를 이용하여 파일을 설치하는 작업을 할 수 있습니다.

[my folder]
\->Release
\--->Windows
\------>aaa.dll
\--->Program
\------>main.exe
\->Source

 우편으로 질문이 왔던 위와 같은 상황이라면, 아래와 같이 코드를 작성하시면 됩니다.


	Name 'NSIS_EX_TEST'
	OutFile 'NSIS_EX_TEST.EXE'
	InstallDir '$PROGRAMFILES\MyProgram'

	Section 'Ex_Test'
		SetOutPath $WINDIR
		File 'C:\\my Folder\\Release\\Windows\\aaa.dll'
		
		SetOutPath $INSTDIR
		File 'C:\\my Folder\\Release\\Program\\main.exe'
	SectionEnd

댓글을 달아 주세요


헬마입니다.

최근에 VMware 로 원격 디버깅 하는 법을 올렸는데

XP 의 경우에는 중간에 또 하나 경고창이 뜨더군요. 그에 대한 보충 글을 올립니다.

XP 의 경우에는 F6 을 눌러 디버깅을 시작하면 아래 화면처럼 경고가 뜹니다. 자세히 읽어보면 로컬 계정으로 로그인이 안대고 게스트 계정으로 인증대서 디버깅 권한이 없다는 말입니다. 로컬 보안을 고치라는군요.



고쳐야 디버깅을 할 수 있다는데 고쳐야겠지요.
gpedit.msc 를 띄웁니다.
아래 화면 처럼 로컬 보안 정책을 수정한 후에 재부팅하고 다시 시도하시면 됩니다.


그럼 편안한 디버깅 샐활하시길.. ^^

댓글을 달아 주세요

  1. navii 2009.07.26 19:45 Address Modify/Delete Reply

    좋은 글 감사합니다 ^^

  2. rdbe 2009.11.10 10:30 Address Modify/Delete Reply

    좋은 정보 감사합니다... 많은 도움 될것 같습니다.

헬마입니다.

매우 매우 오랜만에 NSIS 관련한 글을 포스팅하게 되었네요.

NSIS 의 SearchParse 와 SearchReplace

NSIS 에 새로 컴파일 타임 명령어로 SearchParse 와 SearchReplace 라는 명령이 추가되었습니다.

사실 추가된지는 꽤 되었습니다. 하지만, 의외로 쓰시는 분이 별로 없는듯하여 이번에 간단한 글을 작성해보려 합니다.

이 명령들은 사실 일반적으로는 별로 쓰일일이 드문편입니다. 주로 이 명령들이 쓰이는 곳은 다른 언어의 설정파일과 설정내용을 동기화할 때 쓰이지요.

예를 들어, C++ 로 윈도 응용 프로그램을 작성하면 보통 제품의 버전번호는 소스코드의 rc 확장자를 가진 리소스 파일에 저장되고 관리됩니다.

하지만, NSIS로 설치관리자를 만들때 VIAddVersionKey 라던가 VIProductVersion 이라는 속성을 사용해서 설치관리자에도 버전을 설정할 수 있지만, 이 둘을 언제나 일치시키는 것은 역시나 귀찮은 일이지요.

이럴때 위의 두가지 컴파일 타임 명령어를 사용하면 자동으로 동기화를 시킬 수 있어요. ^^

간단한 예제를 통해서 그 방법을 적어보겠습니다. ^^

사실, 저도 한동안 NSIS 작성할 일이 없어서 손을 안대고 있다가 최근에 회사 프로젝트의 설치관리자를 수정하다가 적용해보고 적는 것 입니다 ^^

준비물 :
NSIS - 사용하는 버전이 2.45 버전이라면 http://nsis.sf.net 에서 일일빌드를 받아서 설치하세요. 공식배포 2.45버전에는 !searchparse 명령에 버그가 있습니다
동기화할 파일

먼저, 도움말을 살펴보죠.

	!searchparse

		[/ignorecase] [/noerrors] [/file] source_string_or_file substring_start OUTPUTSYMBOL1 [substring [OUTPUTSYMBOL2 [substring ...]]]
source_string_or_file 을( /file 을 설정하면 파일이름으로, 설정하지 않으면 문자열로 취급 ) 분석하여 substring_start 을 검색합니다.
substring_start 가 검색되면 OUTPUTSYMBOL1 이 문자열의 나머지 부분( substring 을 설정했고 이 문자열이 검색되면 이 문자열은 제외됨 ) 이 선언됩니다. 몇 개의 OUTPUTSYMBOLx 라도 설정될 수 있으며 마지막의 substring 은 선택적입니다.
/noerrors 가 설정되면, 모든 문자열이 일치하지 않아도 되며 ( 모든 OUTPUTSYMBOLx ) 후에 검색되지 않은 하위문자열은 무시됩니다.
/file 가 설정되면, 파일은 줄의 모음으로 취급됩니다. 파일은 모든 하위문자열이 일치할 때 까지 검색됩니다. /noerrors 가 설정되고 모든 문자열이 일치하지 않았다면 가장 많은 기호가 일치한 첫 행이 사용됩니다.
	!searchreplace

		[/ignorecase] symbol_out source_string searchfor replacewith 
source_string 을 검색하여 이 문자열에서 searchfor 를 모두 replacewith 로 치환합니다. !define 과는 다르게 !searchreplace 는 여러분이 경고 또는 오류없이 symbol_out 을 재정의할 수 있도록합니다.
음, 솔직히 제가봐도 알쏭달쏭합니다. 어떻게 쓰라는 건지 영 감이 안오죠.

예제로 사용할 파일 소스
- 첨부파일로 들어있는 rc 파일을 사용하시면 됩니다.

이제 첫 단계로, 어느 부분을 동기화 시킬지 결정해야죠. 저는 rc 파일에서 제품 버전정보를 가져와서 이를 언제나 설치관리자의 버전 정보로 사용하고 싶어요.
그래서 rc 파일을 살펴보니 PRODUCTVERSION 1,0,0,1 이라는 부분이 보입니다. 이 부분을 가져다가 요리저리 가공하면 어찌될 것 같네요.

아래는 예제 코드에요.
간단한 주석을 실었습니다.

Name 'NSIS_EX'
OutFile 'NSIS_EX.EXE'

!include MUI.nsh
!insertmacro MUI_LANGUAGE "Korean"

; Calc_test.rc 파일에서 PRODUCTVERSION 이라는 문자열을 찾은 후 그 줄의 그 다음 부분을 VERSION_NAME 이라는 이름으로 선언. ( 변수가 아니라 !define 으로 선언한 것과 같은 효과 입니다 )
!searchparse /ignorecase /file '.\Calc_Test.rc' 'PRODUCTVERSION' 'VERSION_NAME' ''
; rc 파일을 보시면 버전 번호를 지정할 때는 쉼표를 사용하게 되어있습니다. 하지만, VIAddProductVersion 을 사용할때는 마침표로 변경해야합니다. 
; 하지만, !define 으로 선언한 것은 일반적인 방법으로는 쉽게 변경할 수 없습니다. 이를 해결하기위해 !searchreplace 가 추가되었습니다. 
; VERSION_NAME 이라는 기호에서 "," 를 찾아 "." 으로 변경합니다. 처음에 기호 이름을 지정할 때 ${} 로 둘러싸지 않은 점을 눈여겨보세요.
!searchreplace /ignorecase VERSION_NAME ${VERSION_NAME} "," "."

VIAddVersionKey /LANG=${LANG_KOREAN} 'ProductVersion' '${VERSION_NAME}'
VIAddVersionKey /LANG=${LANG_KOREAN} "ProductName" "NSIS_EX"
VIAddVersionKey /LANG=${LANG_KOREAN} "Comments" "NSIS_EX Setup"
VIAddVersionKey /LANG=${LANG_KOREAN} "CompanyName" "초짜 플머 헬마"
VIAddVersionKey /LANG=${LANG_KOREAN} "LegalTrademarks" ""
VIAddVersionKey /LANG=${LANG_KOREAN} "LegalCopyright" ""
VIAddVersionKey /LANG=${LANG_KOREAN} "FileDescription" "NSIS_EX"
VIAddVersionKey /LANG=${LANG_KOREAN} "FileVersion" "${VERSION_NAME}"
VIProductVersion '${VERSION_NAME}'

Function .onInit
	SetSilent silent
	
	MessageBox MB_OK ${VERSION_NAME}
FunctionEnd

Section -
SectionEnd

댓글을 달아 주세요


  Visual Studio 는 msvsmon.exe 라는 원격 디버거 모니터 프로그램을 통해 원격 디버깅을 지원합니다. 하지만, 이를 VMWare 에 사용하려면 네트워크를 설정하거나, 공유 폴더를 설정하고 파일을 복사하는등 디버깅 한번 할때마다 이리저리 작업이 까다로운 것도 사실입니다. 그래서인지, 최근 VMWare 6.X 버전부터 Visual Studio IDE 에 통합되어 편리한 디버깅 기능을 지원합니다.
  최근까지는 전 원격 디버깅을 쓸 일이 없었습니다. 원격 디버깅이 약간 느리다는 문제점도 있고, 속편하게 VMWare 에 Visual Studio 를 설치한 후에 소스코드를 불러서 거기서 직접 디버깅을 했었지요. 그런데, 최근에 이것이 불가능한 일이 생겼습니다. 저의 작업환경은 VS 2008 SP1 인데 VMWare 는 윈도 2000 이었습니다. 윈도 2000은 VS 2008 이 설치가 되지않습니다. ㅠㅠ 결국, 저도 이제 원격 디버깅의 세계에 접어들어야할 관문이 다가온 것 이지요. 그래서 처음에 msvsmon.exe 를 이용해서 직접 원격디버깅을 하려고 자료를 찾았는데 여간 까다로운게 아니었습니다.

 그나마 제일 알아보기 쉽게 설명된 문서가 http://dbrureo.springnote.com/pages/737574/attachments/742500 이 파일이었습니다. 하지만, 역시 까다롭습니다. 그래서 결국 VMWare 가 VS IDE 에 붙어서 디버깅을 지원한다는 것을 생각해내고 이를 이용해보고자 했습니다.

 준비물 :
  - Visual Studio ( 저는 Visual Studio 2008 SP1 을 사용합니다 )
  - VMWare 6.X ( VMWare 6.5.2 를 사용했습니다 )
  - 디버깅할 Guest OS ( 비스타 x86 SP2 를 이용했습니다 )
  - Remote Debugger ( Visual Studio 설치할 떄 옵션으로 미리 설치하거나, 설치 DVD에서 찾을 수 있습니다. )
   - 기본으로 설치되면 C:\Program Files\Microsoft Visual Studio X.0\Common7\IDE\Remote Debugger 에 있습니다.

 준비사항 -
  - Host OS 의 계정 / 비번을 똑같게 Guest OS 에 설정해야합니다.
   즉, Host OS 에 현재 A 라는 계정에 B 라는 비밀번호를 통해 로그인되어있다면, 디버깅하려는 Guest OS 에도 A 라는 계정이 있고 B 라는 비밀번호를 통해 로그인할 수 있어야합니다. ( 자동로그인 설정해두면 편합니다 ).

  - Host OS 의 방화벽 설정, XP 이상이라면 첫 시도할 때 VS 쪽에서 방화벽 설정을 점검하고 자동으로 수정해줍니다. 2000 이라면 VS 도움말을 참조해서 DCOM 과 TCPIP 포트를 일부 허용해주시면 됩니다.
  - Guest OS 의 방화벽은 자동으로 설정됩니다. 꺼두면 조금이나마 빨라지는것 같습니다.


 VMWare Options 설정

  - VS 를 실행해서 VMware - Options 항목을 엽니다.
  - Live Debugging in VM - General 항목을 설정합니다.
   - Virtual Machine = 디버깅하려는 Guest OS 를 지정합니다.
   - Remote Debug Monitor Path = 위에서 언급한 경로에 있는 msvsmon.exe 를 찾아 설정합니다. Guest OS 가 64비트라면 x64 의 것을, 32비트라면 x86 의 파일을 선택합니다.
   - Guest Login Credentials = Guest OS 에 로그인하기 위해 필요한 계정 정보를 입력합니다. 앞서 언급한대로 Host OS 의 로그인정보와 일치해야합니다. 입력하지 않으면 첫 디버깅시도때 인증창이 뜹니다.
   - Guest Command = 파일을 복사한 후 실행할 명령 인자입니다. 기본 사항은 프로젝트의 설정을 이용하는 것이고 이곳에서 따로 설정할 수도 있습니다.
   - Shared Folders = 기본으로 VMware 가 복사해주는 폴더 대신 직접 지정할 수 있습니다. 공백으로 비워둬도 됩니다.

 자, 이제 설정이 끝났으니 F6 을 눌러, 디버깅을 시작해봅니다. 

  F6 를 누르면 VMWare 에 해당 Guest OS 가 시작되지 않았다면 자동으로 시작되고, 이미 시작되어 있다면 Msvsmon.exe 와 디버깅 파일들을 네트워크로 복사해서 실행하는 작업이 시작됩니다.


위의 화면은 처음 F6 을 누르면 나타납니다.

  이 화면은 로그인 작업 전후로 나타나는데요. 로그인이 자동으로 되지 않았다면 직접 로그인하고 로그인 작업이 끝났다면 확인을 누르시면 됩니다. 이것 때문에 자동 로그인으로 설정해두시면 편합니다. 아니면 Guest OS 를 미리 부팅해서 로그인까지 끝내두면 여기서 확인만 누르시면 됩니다.


  VMWare 가 자동으로 Msvsmon.exe 를 복사하면서 실행합니다. Msvsmon.exe 는 실행된 OS의 방화벽 설정을 확인하고 문제가 있다면 위와 같은 창을 띄워 자동으로 수정할 기회를 줍니다. 어차피 가상 OS 니까 편하게 3번째 것을 선택하시면 됩니다. 이 확인창은 Host OS 에 대해서도 동일하게 나타날 수 있습니다. 역시 3번째 것을 선택하면 됩니다. 네트워크 쪽을 잘 모르는데 Host OS 쪽에서 2번째 것을 선택하니 원격 디버깅이 되지 않더군요. ㅠㅠ



  위의 화면은 뭔가 문제가 있어서 원격 디버깅이 실패하면 나타나는 화면입니다. 가끔 정상인데도 나타나는 경우가 있습니다. 이떄 예를 누르면 되기도 합니다. 주로, Host OS 와 Guest OS 의 계정 일치 문제가 제일 많았습니다.


  위의 화면은 원격으로 Host OS 의 VS 에서 작성한 프로젝트가 실행된 화면입니다. 예제로 간단한 시작 프로젝트를 실행해봤습니다.

 위의 화면은 VMWare 가 실제로 네트워크로 복사한 경로입니다. 자동으로 Shared Folders 를 설정하고 원격 디버거 모니터와 프로젝트의 Debug 또는 Release 폴더를 통쨰로 복사한 후 실행해줍니다. 만약 프로젝트가 네트워크 경로에서 실행되는 것을 지원하지 않는다면 다른 우회책을 사용하셔야합니다. ^^

 마지막으로, Guest OS 에서 파일 열기 를 눌러 중단점을 설정한 화면입니다. 보시는 바와 같이 Host OS 쪽에서 정상적으로 중단점이 설정되고 호출 스택등도 문제 없이 확인이 가능합니다.

- 역시 날림 도움글인데 조금이나마 이글로 도움이 되었으면 좋겠습니다. ( ..)( '')//

댓글을 달아 주세요

  1. BlogIcon 김기원 2009.10.28 10:07 Address Modify/Delete Reply

    퍼갈께요... 감사합니다.