web-dev-qa-db-ja.com

NSISからコマンドラインコマンドを実行する

最初のNSIスクリプトを作成していますが、NSISからコマンドラインコマンドを実行できるのか、それともバッチファイルを実行するだけなのか疑問に思っています。どこから始めればいいのかよくわからないので、他の同様のトピックが少し頭を悩ませています。

15
user1457296

NsExecプラグインを確認することをお勧めします。最近、NSISスクリプト内からサーバーにpingを実行する必要がある状況が発生し、次のコードが完全に機能しました。

nsExec::Exec '"C:\Windows\System32\PING.EXE" $URL'

NsExecを使用する利点は、画面にDOSボックスをポップアップさせずにコマンドを実行できることです。戻り値はスタックにプッシュされ、プログラムの出力にアクセスする方法もいくつかあります(存在する場合)。

NSIS Webサイトには、プラグインに関する情報がたくさんありませんが、次のリンクから正しい方向に進むことができます。

http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt

編集:

内部DOSコマンドであるCOPYコマンドについて具体的に質問されたのに気づきました。つまり、pingで行ったように実行することはできません。私は間違っているかもしれませんが、このような基本的なコマンドを実行するために外部プログラムを使用する必要はありません。 NSISコマンドを使用して、ほとんどの内部コマンドを複製できるはずです。

たとえば、1つ(または複数のファイル)をコピーするには、NSISコマンドを使用します。CopyFiles

NSISスクリプティングリファレンス はあなたの友達です:)(ctrl + fもそうです)

10
RyanE

execコマンドを使用してみてください http://nsis.sourceforge.net/Docs/Chapter4.html

4.9.1.2 Exec

コマンド

指定されたプログラムを実行し、すぐに続行します。指定されたファイルは、コンパイルシステムではなく、ターゲットシステムに存在する必要があることに注意してください。 $OUTDIRは作業ディレクトリに使用されます。プロセスを起動できなかった場合は、エラーフラグが設定されます。コマンドにスペースを含めることができる場合は、パラメーターから区切るために引用符で囲む必要があることに注意してください。例:Exec '"$INSTDIR\command.exe" parameters'。引用符で囲まないと、パラメーターの有無にかかわらずWindows9xでは機能しません。

Exec '"$INSTDIR\someprogram.exe"'
Exec '"$INSTDIR\someprogram.exe" some parameters'
8
zenpoy

古いトピックですが、これを適切に行う方法についての情報を取得することはまだ困難です。これは私のために働いたものです:

     nsExec::ExecToStack  'cmd /c "clang --version"'
     Pop $0
     Pop $0
     ;now you have the output in $0

これにより、バックグラウンドでコマンドプロンプトが起動し、次のコマンドが実行されます。

clang --version 

出力は、2番目のポップ$ 0の後に$ 0で返されます。最初のポップ$ 0は、終了コードのみを取得します。

0
addmoss