.nsh 또는 nsis 설치 프로그램에서 .bat 파일을 실행하거나 실행하는 방법 (cmd.exe 또는 기타를 사용하여 수동으로 .bat 파일을 실행하는 것과 동일)?

라칫 사키 다스

OneDrive , Dropbox 또는 Google Drive 와 같은 Windows 탐색기의 탐색 창에 가상 폴더를 만들려고합니다 .

명령 프롬프트에서 수동으로 실행할 때 제대로 작동하는 (HKCU) 수준 에서 레지스트리 항목을 만드는 배치 파일 (예 : 스크립트)이 하나 있습니다 . 하지만 nsis 사용자 정의 스크립트를 사용하여 electron-builder에서 .onInstSuccess 콜백 내에서 동일한 .bat 파일을 실행하려고 할 때 작동하지 않습니다 . 탐색 창에서 xXxxxx (32 비트) 와 같은 가상 폴더 링크 만 생성 하지만 클릭해도 아무 일도 일어나지 않습니다 (.bat 파일에 언급 된 TargetFolderPath를 열어야합니다).

다음은 내 .bat 파일 (add.bat)입니다.

@set uuid=f2b4cf36-0e3d-534a-9835-732a0139c194
@echo off
@reg add HKCU\Software\Classes\CLSID\{%uuid%} /ve /t REG_SZ /d "xXxxxx" /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%}\DefaultIcon /ve /t REG_EXPAND_SZ /d "%SystemRoot%\system32\imageres.dll",-1043 /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%} /v System.IsPinnedToNameSpaceTree /t REG_DWORD /d 0x1 /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%} /v SortOrderIndex /t REG_DWORD /d 0x42 /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%}\InProcServer32 /ve /t REG_EXPAND_SZ /d "%SystemRoot%\system32\shell32.dll" /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%}\Instance /v CLSID /t REG_SZ /d {0E5AAE11-A475-4c5b-AB00-C66DE400274E} /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%}\Instance\InitPropertyBag /v Attributes /t REG_DWORD /d 0x11 /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%}\Instance\InitPropertyBag /v TargetFolderPath /t REG_EXPAND_SZ /d "%USERPROFILE%\xXxxxx" /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%}\ShellFolder /v FolderValueFlags /t REG_DWORD /d 0x28 /f
@reg add HKCU\Software\Classes\CLSID\{%uuid%}\ShellFolder /v Attributes /t REG_DWORD /d 0xF080004D /f
@reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{%uuid%} /ve /t REG_SZ /d xXxxxx /f
@reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /v {%uuid%} /t REG_DWORD /d 0x1 /f

다음은 내 installer.nsh 코드입니다.

Function .onInstSuccess
    ; SetOutPath "$INSTDIR\resources\build\bin\"
    ExpandEnvStrings $0 %COMSPEC%
    ; ExecWait '"$INSTDIR\resources\build\bin\add.bat"'
    nsExec::Exec '"$0" /C if 1==1 "$INSTDIR\resources\build\bin\add.bat"'
FunctionEnd

또한 명확성을 위해 탐색 창에 working.png 및 non-working.png 가상 폴더 링크 이미지 두 개를 첨부했습니다. 여기에 이미지 설명 입력 여기에 이미지 설명 입력

참고 : nsExec :: Exec에 문제가 있다고 생각합니다. .nsh 파일에서 열린 cmd.exe는 cmd.exe에서 .bat 파일을 수동으로 실행 한 것과 동일하지 않습니다.

감사합니다. Rachit V. Sakhidas

멋진

32 비트 NSIS이므로 기본적으로 파일 시스템은 C : \ Windows \ System32를 C : \ Windows \ SysWOW64에 매핑하고 레지스트리는 HKCU \ Software를 HKCU \ Software \ Wow6432Node에 매핑합니다. 따라서 reg.exe가 잘못된 위치에 추가하는 것이므로 "(32 비트)"접미사가 표시됩니다. / reg : 64 매개 변수를 사용할 수 있지만 NSIS는 레지스트리 수정을위한 자체 방법을 제공하므로 reg.exe를 사용할 필요가 없습니다.

다음과 같이 사용하십시오. (오타가 있으면 죄송합니다)

!define /redef uuid "{f2b4cf36-0e3d-534a-9835-732a0139c194}"
!define /redef clsid "Software\Classes\CLSID"
SetRegView 64
WriteRegStr HKCU "${clsid}\${uuid}" "" "xXxxxx"
WriteRegExpandStr HKCU "${clsid}\${uuid}\DefaultIcon" "" '"%SystemRoot%\system32\imageres.dll",-1043'
WriteRegDWORD HKCU "${clsid}\${uuid}" "System.IsPinnedToNameSpaceTree" 0x1
WriteRegDWORD HKCU "${clsid}\${uuid}" "SortOrderIndex" 0x42
WriteRegExpandStr HKCU "${clsid}\${uuid}\InProcServer32" "" '"%SystemRoot%\system32\shell32.dll"'
WriteRegStr HKCU "${clsid}\${uuid}\Instance" "CLSID" "{0E5AAE11-A475-4c5b-AB00-C66DE400274E}"
WriteRegDWORD HKCU "${clsid}\${uuid}\Instance\InitPropertyBag" "Attributes" 0x11
WriteRegExpandStr HKCU "${clsid}\${uuid}\Instance\InitPropertyBag" "TargetFolderPath" "%USERPROFILE%\xXxxxx"
WriteRegDWORD HKCU "${clsid}\${uuid}\ShellFolder" "FolderValueFlags" 0x28
WriteRegDWORD HKCU "${clsid}\${uuid}\ShellFolder" "Attributes" 0xF080004D
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\${uuid}" "" "xXxxxx"
WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel" "${uuid}" 0x1
SetRegView lastused

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관