C#で、実行しているプログラム自身を更新する処理

自分自身を更新することは通常はできないので、プログラムAが自身を更新したい場合は、「プログラムAが終了するまで無駄に自身にpingを飛ばすことで5秒間ほど待って、プログラムAを上書きコピーする」というコマンドプロンプトを呼び出すことで、擬似的に自分自身を更新する。

string strCmd = "cmd /c ping localhost -n 5  & copy /y /b " + strSrcFile + " " + strDstFile;
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.Arguments = strCmd;
System.Diagnostics.Process.Start(psi);