간만의 포스팅(3년만...)


간만의 NSIS...


퀘스트는 제목과 같았다...

설치 중 취소하면 취소 전 설치 된 파일을 모두 삭제해 주세요.

고난의 시작이었다.


파일을 설치하기 전단계에서의 취소는 어차피 하드에 기록한게 없으니 상관 없다.


문제는 파일을 설치하는 도중에 취소를 할 경우...


파일 설치는 별도의 thread 에서 처리되고 있어서, 파일 설치 중 강제로 페이지를 이동시키거나 해도 파일 설치 thread 는 계속 동작한다.


그러니 main thread 에서 파일을 삭제해도 제대로 지워지지 않는다.


파일 설치 thread 를 제어할 방법이 있으려나해서 nsis 소스까지 까봤으나 없다. 왜!!


google 느님에게 물어보면 복잡스런 코드가 있기는 한데 이건 취소하면 변수 하나에 취소 했다고 체크해두고


파일 설치에서 한 아이템을 설치 할 때마다 해당 변수를 체크해서 중단하거나 한다.


요거 -> http://nsis.sourceforge.net/InstFiles_Cancel_-_Allowing_a_user_to_cancel_installation_during_InstFiles


하지만, 문제는 너무 번거롭기도 하거니와 설치 스크립트를 아래처럼 폴더로 지정한 경우는 사용이 불가하다. Orz...


    File /r ..\src\* # 이 경우 하나의 아이템으로 처리되고 있어 중단할 수 없다.


결국, 3 일간의 삽질 끝에 해결한 방법을 대충 정리하면 아래와 같다.

  • 설치 SECTION에서 가장 먼저 uninstall.exe 파일을 설치한다. ( 원래는 -post 에서 설치된다. )
  • !define MUI_CUSTOMFUNCTION_ABORT "onUserAbort" # 취소 처리를 제어할 수 있도록 등록한다.
  • 전역 변수 하나를 설정하여, 파일 설치 전 취소 처리에서 알 수 있도록 값을 지정해둔다.
  • onUserAbort 함수에서 파일 설치 중에 취소 했음이 확인 되면 uninstall.exe 를 silent 모드로 실행한다.
    예) ExecWait '"cmd.exe" /C start "" "$INSTDIR\uninstall.exe" /S'
  • uninstall.exe 호출시 주의할 점은 nsExec::Exec 를 이용하면 안된다. nsExec::Exec 를 이용하면 파일 손상 에러가 난다. (이유는 모름.)
  • un.onInit 에서 silent 모드인 경우 설치 프로세스를 종료하도록 처리 한다.

Function un.onInit

    ${GetParameters} $R0

    ${If} $R0 == "/S"

        nsExec::Exec 'taskkill /F /IM ${OutFile}'

        Sleep 2000

    ${EndIf}


상세 코드는 귀찮으니.... 나중에 생각나면 정리해서 올려야겠다.

반응형
오랜만의 글입니다. :) 요즘은 아들 보느라 정신없어서.. ㅎㅎㅎ

이제 111일 되었지만... 돌잔치 장소는 미리 예약하지 않으면 자리 없다고 해서 -_-
마침 집에서 그리 멀지 않은 곳에 파티유플러스(party-u+)라는 돌잔치 전문점이 생겼다고 해서 유모차 끌고 살짝 알아보러 다녀왔습니다.
 



건물 로드뷰 링크 : http://dmaps.kr/7ks9
파티유플러스 홈페이지 : http://partyuplus.com
파티유플러스 카페 : http://cafe.naver.com/partyuplus.cafe

영화보러 종종 가던 성신여대 CGV 있는 건물 13층 전체를 사용하고 있었습니다.
지하철역이랑 연결되어있는 건물이고 바로 앞에 버스정류장도 있어서 대중교통을 이용해 오시는 손님들에게는 좋을 것 같았습니다.
다만, 저 건물에 주차하기가 좀 어렵다는 얘기는 있습니다. -_-;;;

가본 느낌은, 내부 분위기는 최근에 다녀본 돌잔치 장소와 구조는 크게 다르지는 않았지만, 새로 생겨서인지 깔끔했고, 상담해주시는 분도 친절했습니다.

장점으로 느꼈던 부분들입니다.
- 홀별로 수유실 구비
- 기본식사(떡갈비/등심/랍스타,안심) + 무한 부페 (다만, 음료수는 별도 계산)
- 13층이라 확 트인 전망
- 편한 대중교통

오픈한지 얼마 안되서 이런 저런 오픈이벤트도 하고 있으니, 돌잔치 장소를 알아보고 계신분들은 한번 알아보시는 것도 괜찮을 듯 합니다.

반응형
nsis 에서 바로가기를 생성해주는 CreateShortcut 명령어.
근데 사용하다보니 생성된 바로가기의 "시작 위치" 정보가 이상하게 들어가고 있어 메뉴얼을 봤지만 CreateShortcut 에는 해당 정보 설정이 없다. 해서 우짜저짜 하다가 알게 된 방법. 사실 맞는 방법인지는 모르겠지만, 잘 되니까 뭐 -_-

CreateShortcut 명령 사용 전에  SetOutPath 을 통해 "시작 위치" 로 지정할 폴더를 지정해주면 된다.

사용 예)
반응형
작업하다가 필요해서 찾은 코드. 뭐 간략하고 사용하기 편한 듯

 출처 : http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/0f749fd8-8a43-4580-b54b-fbf964d68375/

 
반응형
해운대
감독 윤제균 (2009 / 한국)
출연 설경구, 하지원, 박중훈, 엄정화
상세보기

그닥 기대가 안되었던 영화라 극장에서 볼 생각은 안하고 있었는데 갑작스래 후배가 '해운대' 관람 벙개를 때려서 롯데시네마 홍대입구점에서 보고 왔습니다. 홍대입구에 사람 정말 무쟈게 많더군요... =ㅅ=;;; (서울촌놈... Orz..) 롯데 시네마에도 사람이 너무 많아서 엘레베이터 타고 올라가기가 힘들었습니다.

영화 보기 전 해운대에 대해 들은 내용은 CG 홍보밖에 없어서 내용은 좀 유치하겠거니... 하고 있었기에 별 기대 없이 봤습니다. 역시 말이 많던 CG 부분은 외국의 블록버스터들로 인해 눈이 한참 올라간 관객들을 만족시키기에는 좀 부족하지 않았나 합니다. 외국 CG팀에 의뢰까지 해가며 만든 것 치고는 어색한 부분이 많더군요.

대신, 기대하지 않았던 드라마 부분에서는 괜찮은 점수를 주고 싶습니다. CG에 기대어 유치할거라 생각했던 선입견과는 달리 꽤나 짜임새 있고 지루하지 않게 진행되기 때문에 시간 가는 줄 모르고 몰입해서 볼 수 있었습니다. :)
반응형
A Sip of Turkish Coffee
A Sip of Turkish Coffee by Kuzeytac (OUT, till 20.08.09-see profile) 저작자 표시비영리변경 금지

(위 짤방은 그냥 Filckr 에서 'heap' 으로 검색하니까 나온 이미지로, 본문과는 전혀 상관 없습니다;;;)

언젠가부터 자꾸 map 처리에서 exception 이 발생하기 시작했습니다...
해당 map 이 상당히 간단하게만 사용되던 부분이라 중첩콜 되는 부분도 없었고, 여러 스레드에서 호출되는 부분도 없었던지라
map 사용 오류라기 보다는 어디선가 다른 코드에서의 메모리 쓰기 오류로 판단만 하고 있었죠...
자주 발생하고 재현하기가 쉬운 문제라면 디버깅이라도 해서 문제 부분을 잡을 수 있겠지만 그런것도 아니었기에 난감한 상황이었습니다.

어찌되었든 해결을 해야 했기에 배열 인덱스 검사 코드 강화, map 사용 코드 다시 확인 등등을 해도 찾기가 쉽지 않더군요..

인터넷에서 검색을 해보니 도움을 받을 수 있는 프로그램들이 있는 것 같았지만 모두 상용 프로그램인지라 쉽사리 사용할 수도 없었습니다.
그러던 중 _heapchk() 에 대한 내용을 봐서 혹시나 하는 마음에 코드에 추가하여 로그를 살펴보기로 했었습니다.

결과는 일단은 성공입니다.

로그에 _heapchk() 오류가 남은 부분을 다시한번 체크해보니, 배열 사용하는 부분이었는데 배열 인덱스 체크하는 부분이 없어서 잘못된 인덱스에 대한 대비가 안되어있는 부분이더군요.

정확한 오류부분을 찝어주지는 않지만, 범위를 좁혀가는 식으로 사용하면 큰 도움이 될 것 같습니다. :)
반응형

'저장고 > C++' 카테고리의 다른 글

std::string 문자열 공백 자르기 함수  (0) 2009.04.28
COptionTree를 vs2003에서 사용하기  (0) 2009.04.10
GoogleTest??  (2) 2008.10.14
랭킹 관련 작업을 하다가 필요해서 찾은 기능으로 특정 테이블의 데이터를 SELECT 할때 원하는 정렬 값으로 순위를 매길 수 있는 기능

SQL2005에서 관련해 추가된 명령어와, 2005 이전버젼에서 사용할 수 있는 쿼리문이 함께 나와있습니다.

근데 보니까.... 양이 많은 데이터에서는 권장하지 않는다고... -_-

반응형

'저장고 > 기타' 카테고리의 다른 글

NSIS CreateShortcut 사용시 시작 위치(Start in) 정보 설정 방법  (1) 2011.09.01
[SQL] NULL + '문자열' = ?  (0) 2009.06.11
[MSSQL] CASE 함수  (0) 2008.05.19
얼마전 SP를 작업해서 협력사에 넘겼는데 정상 작동을 안한다고 해서 몇시간을 헤맨적이 있습니다. 결국 밝혀진 원인은 제목과 같은 NULL + '문자열' 의 결과였는데 이게 MS-SQL 버젼에 따라 결과가 좀 다르게 나오더군요...

두개의 테이블에서 문자열을 하나씩 검색해서 + 연산으로 문자열을 합치는 쿼리문이었는데 앞에 테이블에서 검색된 열 갯수가 0일 때 문제가 된 것이었습니다.

대충 아래 쿼리와 비슷한 쿼리문이었습니다.

제 작업 환경은 MS-SQL2000, 협력사의 테스트 환경은 MS-SQL2005 였는데 2000에서는 앞의 테이블 검색 결과가 없어도 뒤 테이블에서 검색된 데이터가 출력되는 반면에 2005에서는 앞의 테이블 검색수가 0이면 뒤 테이블 검색 결과에 상관없이 무조건 NULL 이더군요. 결국 ISNULL() 을 사용해서 해결은 했습니다.

근데 또 다른 비슷한 경우를 만들어서 테스트를 해보니 NULL 나오는게 정상인듯 싶네요. 앞으로 주의해야겠습니다;;;
반응형

'저장고 > 기타' 카테고리의 다른 글

[SQL] SELECT 할 때 동적으로 순위 매기기  (0) 2009.06.17
[MSSQL] CASE 함수  (0) 2008.05.19
NSIS 임의로 Page 이동하기  (3) 2007.01.19
문자열에서 공백(스페이스, 텝 등)을 제거해주는 함수.
코드가 간결하고 좋다


반응형

'저장고 > C++' 카테고리의 다른 글

_heapchk() 메모리 긁는 문제의 실마리...  (0) 2009.08.01
COptionTree를 vs2003에서 사용하기  (0) 2009.04.10
GoogleTest??  (2) 2008.10.14
COptionTree Codeproject Page Link

위 링크를 가보면 알겠지만 상당히 유용한 라이브러리인 COptionTree
하지만, vs2003에서는 위 링크에서 제공하는 소스를 컴파일 할 경우 여러가지 에러가 나며 컴파일 되지 않습니다.



이를 해결하기 위한 방법입니다.

1. 포함 파일을 열 수 없습니다. '..\src\afximpl.h': No such file or directory

afximpl.h 파일 include 에러가 나는 코드를 찾아가서 아래와 같이 수정합니다.

OptionTreeFontSelSizeCombo.cpp
OptionTreeFontSel.cpp


2. 매개 변수 2을(를) 'HTASK'에서 'DWORD'(으)로 변환할 수 없습니다.

아래 파일들에 선언/사용된 함수의 HTASK 인자형식을 모두 DWORD 로 변경해줍니다.

OptionTreeColorPopUp.h(123): afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
OptionTreeColorPopUp.cpp(1181):void COptionTreeColorPopUp::OnActivateApp(BOOL bActive, HTASK hTask) 
OptionTreeImagePopUp.h(88): afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
OptionTreeImagePopUp.cpp(284):void COptionTreeImagePopUp::OnActivateApp(BOOL bActive, HTASK hTask) 


위의 두가지 수정작업만 해주면 vs2003에서도 COptionTree 를 문제 없이 사용할 수 있습니다. :)
vs2005는 안써봐서 잘 모르겠지만, vs2005에서도 위와 같은 방법으로 사용가능한 것으로 알고 있습니다. :)
반응형

'저장고 > C++' 카테고리의 다른 글

std::string 문자열 공백 자르기 함수  (0) 2009.04.28
GoogleTest??  (2) 2008.10.14
callstack 정보 출력 라이브러리  (0) 2008.09.19

+ Recent posts