結局この件は以下の方法なら何とかできることがわかりました。

この方法で、Ctrol-Cを入力として受け付ける方法。

あるいは、かなり無理やりですがC#をコンパイルしてその中でWin32APIのSetConsoleCtrlHandlerを呼ぶ方法。

本当は、Ctrl-Cがおされたら、PowerShell内の関数を呼びたかったりするわけですが、PowerShell→C#→PowerShellとうまく連携させる方法はわからずじまいでした。delegateをPowerShellで作成できてしまうらしいので、何とかなりそうではあるんだけど・・・。技術力不足です・・・。

結局現在の私の技術力の中でやるとして一番簡単なのは、C#でWin32APIのSetConsoleCtrlHandlerを呼びつつ、そこで呼び出す処理としてPowerShellのスクリプトを別途呼んでしまう・・・という方法でした。これなら引数も別途渡せるし、PowerShell内で別のPowerShellスクリプトを呼ぶのは簡単だから、どうにでもなるかなと。

でも、かなり気持ち悪いので、結局この処理はそもそも入れないことにしました。

「そもそも入れない」という選択肢がありうるなら、体調がわるいなかこんなに時間をかけて調べるんじゃなかった…とかなり後悔しましたが、自分の力のなさを知るのはいい機会だったと思って良しとします。

コメントを残す

メールアドレスが公開されることはありません。