Windows EXE実行ファイルのリリースについて


Visual studio(C#)でコンパイルした、  
Windows EXE実行ファイルのリリースについて質問です。

バッチシステムとしてタスクスケジューラーで起動させますが、  
頻繁にシステム改修があり、都度リリースが必要です。

しかし、システム実行中にリリース(EXEファイルの上書き)を行うと、  
起動中のため上書きエラーとなります。

実行中のEXEに対して、  
次回の実行分から最新のシステム改修を反映させるには、  
どのようにしたら良いでしょうか？

以下私の案がございますが、スマートではありませんし、  
実行開始に時間がかかるデメリットがございます。  
他にスマートな案はございますでしょうか？

起動に関するフレームワークなどあるのでしょうか。

<案>  
1.処理開始時に本体EXEファイルをコピーして実行版EXEファイルを作成する(同一のEXEファイル)  
2.実行版EXEファイルを起動する  
3.実行中でも本体EXEファイルは上書き可能なため、本体EXEファイルに対してリリース(EXEファイルの上書き)を行う




正攻法としては[Windows Installer](https://docs.microsoft.com/en-
us/windows/desktop/msi/windows-installer-portal)です。ファイルが使用中の場合、[Restart
Manager](https://docs.microsoft.com/en-us/windows/desktop/msi/using-windows-
installer-with-restart-manager)を用いて再起動後の置き換えを試みます。再起動を好まないということでしたら選択肢から外れます。

774RRさんの提案されたClickOnceには自動更新機能があります。しかし、ClickOnceはデスクトップ画面での対話操作を前提としているので、タスクスケジューラーからの起動では正しく動作しない可能性があります。少なくともサービスとしての起動はサポートされていません。

これ以外となると起動に関するフレームワークは用意されていないと思います。

順当にローダープログラムと本体を分離することでしょうか。

  * インストーラーは本体プログラムを連番など一定のファイル名で配置する
  * ローダープログラムは最新を残して不要なファイルを削除する
  * ローダープログラムは最新の本体を起動する

といったところです。ローダープログラムは分かり易くPowerShellなどのスクリプト言語で記述するのもいいかもしれません。

