最初のNSIスクリプトを作成していますが、NSISからコマンドラインコマンドを実行できるのか、それともバッチファイルを実行するだけなのか疑問に思っています。どこから始めればいいのかよくわからないので、他の同様のトピックが少し頭を悩ませています。
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もそうです)
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'
古いトピックですが、これを適切に行う方法についての情報を取得することはまだ困難です。これは私のために働いたものです:
nsExec::ExecToStack 'cmd /c "clang --version"'
Pop $0
Pop $0
;now you have the output in $0
これにより、バックグラウンドでコマンドプロンプトが起動し、次のコマンドが実行されます。
clang --version
出力は、2番目のポップ$ 0の後に$ 0で返されます。最初のポップ$ 0は、終了コードのみを取得します。