간만의 포스팅(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}


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

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

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

사용 예)
반응형
랭킹 관련 작업을 하다가 필요해서 찾은 기능으로 특정 테이블의 데이터를 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
최근의 mssql 작업 중 가장 큰 도움을 받은 case 함수!!!

여러가지 통계 sp를 작성중에 막혔던 부분을 우연히 찾은 case 함수 덕에 술술술 풀어나갈 수 있었다.

작업할때 알았던 페이지는 아니지만 잘 정리되어있는 페이지를 발견해서

링크!!~

링크 : [T-SQL의 해결사 - CASE 함수]
반응형

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

[SQL] NULL + '문자열' = ?  (0) 2009.06.11
NSIS 임의로 Page 이동하기  (3) 2007.01.19
자신의 외부 IP를 알고 싶을 때... :)  (2) 2006.12.06
User inserted image

이번에 Vista 대응 작업을 하던 중 NSIS에서 설치 페이지를 뒤로 옮겨야 하는 일이 생겼다.
기본 Manual을 아무리 찾아봐도 안나오고 -_ㅠ
한참의 삽질 끝에 결국 google님의 힘을 빌어 찾아냈다.

아무래도 직접적인 페이지 이동 명령어는 존재하지 않고 SendMessage를 이용하여
뒤로 버튼을 누른 윈도우 메세지를 전달하는 듯 하다.

링크 : http://nsis.sourceforge.net/Go_to_a_NSIS_page

추가해줘야 할 Function

Function RelGotoPage
IntCmp $R9 0 0 Move Move
StrCmp $R9 "X" 0 Move
StrCpy $R9 "120"

Move:
SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd

사용 법 : $R9 스텍에 페이지 이동 수치를 입력 후 RelGotoPage를 호출

StrCpy $R9 "(number|X)" ;Relative page number. See below.
Call RelGotoPage

내 경우는 InstallPath 를 점검하여 설치 할 수 없는 폴더일 경우 다시 폴더 선택을 하도록 하는 처리가 필요했으며 파일 설치 직전에 $INSTDIR 를 체크하여 설치할 수 없는 폴더일 경우 -1 페이지 이동 처리를 했다. (파일 설치 페이지가 폴더 선택 페이지 바로 다음이었다.)

NSIS 메뉴얼 너무 부실해.. -_ㅠ
반응형

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

[MSSQL] CASE 함수  (0) 2008.05.19
자신의 외부 IP를 알고 싶을 때... :)  (2) 2006.12.06
MS-SQL 매일 날짜별로 백업화일 생성하기  (0) 2006.10.17
하나의 인터넷 라인을 같이 쓰는 경우가 많은 요즘
자신의 외부 IP를 알아내는게 그다지 간단하지 않다.
command 창에서 ipconfig /all 을 해봤자 나오는건 192.168.XXX.XXX 같은 내부 IP뿐
(컴 IP좀 알려달라고 하면 저 내부 IP를 알려주시는 분이 많다;;;)

이럴 때 간단하게 자신의 외부 IP를 알아낼 수있는 사이트가 있으니


http://www.whatismyip.com


위의 사이트로 들어가면 화면의 중앙즈음에 대문짝만하게 자신의 IP를 출력해준다.
만사가 귀찮은 요즘시대에 유용한 사이트가 아닌가 싶다. =ㅅ=)b
반응형
다른 정보를 찾다가 이 정보를 찾았네요..
지금은 다른 방법을 써서 해결하고 있었지만... 다음번에는
아래의 방법을 써봐야겠습니다.

http://www.dbguide.net/ 사이트의 QnA 게시판에 신인식(eternize) 이란 분이 올려주신 답변에서 퍼왔습니다.

SQL 서버로 백업시 백업화일을 날짜별로 생성하는 방법입니다.

declare @str nvarchar(100)
set @str = N'c:\backup\mydb' + convert(nvarchar(20), getDate(), 112) +N'.bak'
BACKUP DATABASE [mydb] TO DISK = @strWITH NOINIT , NOUNLOAD , NAME = N'mydb backup', NOSKIP , STATS = 10,NOFORMAT

위의 스크립을 job으로 스케쥴링 거시면 됩니다.해당 일정이 되면 mydb20040825.bak, mydb20040826.bak 이런식의 백업화일이생성됩니다.기타 백업 옵션에 관핸 부분은 BOL을 참고하시면 될듯합니다.

반응형

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

NSIS 임의로 Page 이동하기  (3) 2007.01.19
자신의 외부 IP를 알고 싶을 때... :)  (2) 2006.12.06
MS-SQL Log 파일 크기를 줄여보자...  (2) 2005.09.07
이런 저런 테스트를 하다보니 어느새 트렌젝션 로그파일 크기가

무려 15기가!!

줄여보자...Orz..

[환경]
db name : xozu
db log file : xozu_log

[줄이기]

작동 원리는 모르겠지만.. 어쨋든 저렇게 하니 줄어든다 /-ㅂ-)/
방금 15기가이던 로그파일을 1메가로 줄였다... 하하하
(사실 실수 3기가로 줄일라고 했는데... ㅠ_ㅠ)

덤으로... Backup 파일 이용해서 restore 시키기

[BACKUP FILE 정보 확인하기]
[RESTORE 작업]
반응형

+ Recent posts