6

NSIS 2.46 でそれを行うにはどうすればよいですか?

これはおそらくばかげた質問だと思いますが、空のディレクトリを作成してエラーをチェックするにはどうすればよいですか?

私はそうします:

ClearErrors
CreateDirectory $R1
${If} ${Errors} 
  DetailPrint "failed"
  MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Can not create folder $R1"
  Abort
${Else}
  DetailPrint "done"
${EndIf}

変数 $R1 が

  • "c:\test" - 完了
  • "c:\con" - 失敗しました ("con" - Windows で予約済み)
  • "qwer:\test2" - 完了
  • "qwer\test3" - 完了 (":" なし)

なぜ "test2" と "test3" でエラーが発生しないのですか?

更新: それがエラーだったことを確認する方法は?

4

4 に答える 4

0

ドキュメンテーションは、CreateDirectoryかなり無責任error flag is setに、これが何を意味するかについて、不定期の NSIS スクリプト作成者にあいまいさを残すことを明確に述べています。

当然のことながら、NSIS でのエラー処理も非常にまばらに文書化されています... しかし、幸いなことに、コメントをよく読めば、エラーをキャッチする方法が説明されています。

設定されている場合は goto [first param]、そうでない場合は goto[second param]

gotoGOTO line jumpingへの逆戻りであるドキュメント内の単語に特に注意してください。

ClearErrors
CreateDirectory $R1
IfErrors 0 +2
Call ErrorHandler

すぐには明らかでないのは、エラー ハンドラを+2 JUMPS OVERすることです。0これで、の行、つまりエラー ハンドラに移動すると推測できます。

上記の例は:ErrorHandler、スクリプトのどこかに定義されているエラーを適切に処理する必要があり、好きなロジックに置き換えることができます。

; Commenting heavilyこのスクリプト言語は、毎日使用しないと読みにくい可能性があるため、お勧めします。

于 2018-03-10T03:21:47.917 に答える