2017-05-02 12 views
0

다음과 같은 문제가 발생했습니다 :
NSIS에서 powershell 스크립트를 사용하려고하지만 설치 프로그램을 시작하면 Powershell 창이 팝업되지만 즉시 닫힙니다. 필자가 볼 수있는 것은 powershell이 ​​오류 (빨간색 글자)를 인쇄하지만, 즉시 닫히기 때문에 오류가 무엇인지 알 수 없다는 것입니다.NSIS에서 Powershell을 실행하십시오.

내 모든 스크립트 내가으로 'schtask'당이 XML 파일을 가져 명령 'WHOAMI'의 출력과 결국 "CURRENTPC \ CURRENTUSERNAME"를 대체하여, 템플릿 .XML 파일에 자리 표시를 대체 않습니다 작업 스케줄러.

스크립트를 별도로 실행하면 원하는대로 작동하지만 컴파일 된 설정을 사용하면 설명한 문제가 발생합니다.

물론 해결책을 찾는 데 시간을 할애합니다.

  • 내가 그것을 32 비트에서 실행 있는지 확인하기 위해 내 스크립트에 체크 구축 :
    나는 다음 시도했다. 내 .XML 템플릿 내가 ','ExecWait '를 통해 NSIS 내부 NS를 PowerShell을 실행

  • 남아있는 경우 예, 64 비트에서 다시 시작

  • 나는 패스에 하드'CD '를 한 경우 :: ExecToLog '및'ns :: ExecToStack '

더 이상 무엇을 해야할지 모르겠습니다. 누군가가 도울 수 있기를 바랍니다. 코드를 읽고 싶은 사람들을 위해

: 나는이 NSIS 내부의 스크립트를 사용하는 방법
입니다 :

File ProcessControlTemplateFill.ps1 

ExecWait 'powershell -inputformat none -ExecutionPolicy RemoteSigned -File ".\ProcessControlTemplateFill.ps1"' 

을 그리고 이것은 내 .ps1입니다-스크립트입니다

############################################################################# 
#If Powershell is running the 32-bit version on a 64-bit machine, we 
#need to force powershell to run in 64-bit mode . 
############################################################################# 
if ($env:PROCESSOR_ARCHITEW6432 -eq "AMD64") { 
    write-warning "Y'arg Matey, we're off to 64-bit land....." 
    if ($myInvocation.Line) { 
     &"$env:WINDIR\sysnative\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoProfile $myInvocation.Line 
    }else{ 
     &"$env:WINDIR\sysnative\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoProfile -file "$($myInvocation.InvocationName)" $args 
    } 
exit $lastexitcode 
} 


write-host "Main script body" 

############################################################################# 
#End 
############################################################################# 

cd C:\R15 

$WERBINICH = whoami 

ForEach($Datei in ls './sources/ProcessControlTemplate.xml') { 

    $Zeilen = Get-Content -Path $Datei.Fullname 

    $ZeilenZähler = 1 
    foreach($Zeile in $Zeilen) 
    { 

     $Zeile = $Zeile -replace 'CURRENTPC\\CURRENTUSERNAME', "$WERBINICH" 

     Write-Host $Zeile 

     If($ZeilenZähler -eq 1) { 
      Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force 
     } 
     Else { 
      Out-File -FilePath $Datei.Fullname -InputObject $Zeile -Force -Append 
     } 

     $ZeilenZähler++ 
    } 
} 
schtasks /create /f /XML .\sources\ProcessControlTemplate.xml /tn ProcessControl 
+0

NSIS 설치 프로그램의 목적은 무엇입니까? 왜 PowerShell 스크립트를 직접 실행하지 않습니까? –

+0

@Bill_Stewart 설치 프로그램이 주요 프로젝트의 일부분이며 내 설정을 사용하는 미래의 "클라이언트"가 수동으로 설치 프로그램을 사용하여 나중에 스크립트를 시작하지 않아도됩니다. – Gluglack

+0

죄송하지만 사용자가 무엇을 요구하는지 이해할 수 없습니다. . –

답변

0

사용 ProcessControlTemplateFill.ps1의 전체 경로이며 상대 경로는 아닙니다. PowerShell 스크립트에서 Start-Sleep -s 10을 사용하여 오류를 읽을 수 있도록 잠시 멈추십시오.

+0

시도했습니다 ... 잘 작동하지 않았습니다. – Gluglack

+0

그것은 전체 경로로 잘 작동하며 방금 테스트했습니다. NSIS의 SetOutPath는 현재 디렉토리를 변경하지만 사방에 전체 경로를 사용해야하므로 중요하지 않습니다! – Anders