2011-11-14 7 views
3

설치 프로그램이 끝나면 .exe 파일을 시작한 다음 설치를 종료하고 싶습니다. 나는 아래 exe를 시작하는 다양한 방법을 시도했지만, 그 중 어느 것도 옳지 않다. .exe 파일은 로그인 화면을 표시하고 사용자가 사용자 이름과 암호를 입력하면 기본 응용 프로그램이 시작됩니다.NSIS 설치 프로그램 실행 후 실행 시작

폴더의 .exe를 두 번 클릭하면 로그인 프롬프트가 표시되고 자격 증명을 입력하면 응용 프로그램이 시작됩니다.

nsExec을 ExecShell에게

ExecDos::exec /NOUNLOAD /ASYNC '$Path${APP_FILE_NAME}' 
Sleep 30000 

비동기

ExecDos

ExecShell "" '"$Path${APP_FILE_NAME}"' 

ExecDos

ExecDos::exec '$Path${APP_FILE_NAME}' 

: 다음 방법은이 과정을 복제하기 위해 설치 프로그램에서 시도되었다

이상하게도 비동기 호출이 작동하여 로그인 화면을 시작한 다음 설치 프로그램을 끝내고 싶습니다.

위의 모든 방법은 예상대로 로그인 화면을 표시하지만 응용 프로그램에 로그인하면 기본 응용 프로그램이 빈 회색 화면에 나타납니다 ... 단순히 .exe를 두 번 클릭해도 표시되지 않는 내용 $ Path 폴더를 열고 정상적으로 로그인하십시오.

.exe를 시작하기 위해 이러한 호출을하는 데 문제가 있습니까?

SetOutPath $INSTDIR 
ExecShell "" '"$INSTDIR\myapp.exe"' 

주요 응용 프로그램을 실행 :

답변

6

문제는 응용 프로그램이 아닌 NSIS와 함께 아마 ...

응용 프로그램은 먼저 SetOutPath를 사용하는 데 필요한 "올바른"작업 디렉토리에 의존하는 경우 (UAC on, 관리자가 아닌 사용자로 로그인 한 사용자, RequestExecutionLevel를 설정하지 않았거나 RequestExecutionLevel admin을 사용하지 않았다고 가정)

(사용자가 관리자가 아닌 사용자로 로그인 한 경우) 결국 응용 프로그램을 실행할 수 있기 때문에 설치 프로그램의 마지막에 문제가 있습니다.
+0

미국 않습니다합니까 ng'ExecShell "" '...''Exec '...' '보다는 의미가 있습니까? –

+1

@ChrisMorgan NT6 +에서 ExecShell은 ShellExecute()를 사용하고 Exec은 CreateProcess()를 사용합니다. 응용 프로그램이 권한 상승이 필요하고 아직 승격되지 않은 경우 CreateProcess()가 실패합니다. – Anders

+0

감사! 그건 의미가 있습니다. –

관련 문제