2009-11-09 2 views
0

나는의 지금 setup.nsi 그것을 부르 자, NSIS 스크립트를 작성하고, $ SYSDIR

날 "여러 가지"라는 단어

에 강조하자 이미 존재하는 경우 몇 가지 필요한 dll 파일을 을 확인하고 싶었다 무엇

IfFileExists $SYSDIR\blabla.dll +2 +1

을 blabla.dll은 $ SYSDIR에있는 경우 다음이 .. 확인하지만 내가 * 경우 .DLL에서 설정을 알고 싶다면 : 나는 NSIS IfFileExists 문서에서 이해 내가 입력하는 경우이다. nsi는 파일을 복사합니다 (예 : * .dll이 내가 관심있어하는 파일). d에 설치 .. 그리고 그들은 그것들이 많습니다. 그래서 나는 모든 이름들을 검사 할 수는 없습니다.) $ SYSDIR에 존재합니다.

제거하는 동안 나는 $ SYSDIR (일부 uninstall.log를 사용하여 $ SYSDIR .. 및 다시 와일드 카드 질문에 복사했는지 확인하십시오).

저는 NSIS 스크립트를 처음 접했을 때 참 으십시오.

답변

2

를 작성하고 $SYSDIR을 삭제 정말 필요한가? 귀하의 파일이 파일이 아니라면 $ __ SYS__DIR에있을 이유가 없습니다. 특정 버전의 라이브러리를 사용해야하는 경우 DLL 리디렉션을 고려해야합니다 (DLL을 응용 프로그램 디렉토리에 넣고 .local 기능 사용). the MSDN article on DLL redirectionSide-by-side assemblies을 참조하십시오.

더하기, 사용자 컴퓨터를 망가 뜨리는 한 가지 방법이 있습니다 ("Deleted : C : \ Windows \ System32 \ user32.dll").

+0

+1 - SYSDIR에서 와일드 카드 DLL 삭제를 시도하지 않습니다. 그렇지 않으면 필요하지 않으면 응용 프로그램 디렉토리에 보관합니다. –

0

Piskvor에 언급되어 있듯이 제거 프로그램에서 시스템 DLL을 삭제하는 것에 대해 걱정하지 않아야한다고 생각합니다. 시스템 DLL을 업데이트 된 버전으로 덮어 쓰려면 SetOverwrite 명령을 사용하는 것이 좋습니다. 그것은 당신이 가지고있는 것이 더 새로운 것이라면 파일을 덮어 쓸 수있게 해줍니다.

0

Windows XP (SP2?) 이상에서는 system32에 대한 파일 보호 기능이 있으므로 시스템 중요 파일을 덮어 쓸 수 없습니다.

그걸 멀리하려고하십시오.

또한 파일을 특별히 확인하려면 체크섬을 계산하고 제거시 비교할 수있는 NSIS 용 플러그인이 있는지 확인하십시오. 아마도 가장 안전한 방법 일 것입니다.

다른 곳에 파일을 설치하고 PATH에 추가하는 것이 좋습니다.