|
■No100402 (魔界の仮面弁士 さん) に返信 ■No100403 (KOZ さん) に返信
プログラムを修正しました。 Task.Run がビルドでエラーが発生していたので、 .netFramework4.0 から .netFramework4.8 に変更しました。
設定ファイルのチェックを Main で行うように修正しました。 エラー時にプロセスが残らないようになりました。
ここで1つ教えていただきたいことができました。 Main から フォームへ値を受け渡す方法です。 今はMain で取得した値(バージョンやフォルダーのパス)を変数ごとに代入してフォームへ渡しています。 これでも正常に動作できているのですが、 もし変数が増えた場合や後学のために他の方法があれば教えていただきたいです。 受け渡すためのクラスを作成したのですが、 Program.cs で静的クラスでインスタンスのメンバーを宣言することができませんでした。
よろしくお願いいたします。
// Program.cs namespace FilceCopy { internal static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() {
//string srvIP = ""; // 接続先サーバIPアドレス string pUpdate_version = ""; // 更新バージン string pCurrent_version = ""; // 現行バージョン string pCopyFldName = @"C:\Test\Update\Main"; //コピー元のフォルダー(※フルパスはサーバのIPを結合する) string pPasteFldName = @"C:\Main"; //コピー先のフォルダー string pFilePath = @"setting\\setting.xml"; // システム設定ファイル確認
// システム設定ファイルの存在確認 if (!File.Exists(pFilePath)) { Main_Start(); // メインPG起動 return; } // コピー元の存在を確認します if (!Directory.Exists(pCopyFldName)) { Main_Start(); // メインPG起動 return; } // コピー先の存在を確認します if (!Directory.Exists(pPasteFldName)) { Main_Start(); // メインPG起動 return; }
// 更新バージョン取得 pUpdate_version = "Ver2.0.0"; // 現行バージョン取得 pCurrent_version = "Ver1.0.0";
Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1(pUpdate_version, pCurrent_version, pCopyFldName, pPasteFldName)); //Application.Run(new Form1()); }
static private void Main_Start() { try { var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = @"C:\Main\Main.exe";
proc.Start(); // 1秒待機 proc.WaitForExit(1000);
} catch (System.Exception ex) { MessageBox.Show("メインPGが起動ができません"); //MessageBox.Show(ex.ToString()); }
} } }
// From1.cs namespace FilceCopy { public partial class Form1 : Form {
public string update_version = ""; public string current_version = ""; public string copyFldName = ""; public string pasteFldName = ""; public Form1(string pUpdate_version, string pCurrent_version, string pCopyFldName, string pPasteFldName) {
update_version = pUpdate_version; current_version = pCurrent_version; copyFldName = pCopyFldName; pasteFldName = pPasteFldName;
InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { // 別スレッドで更新ファイルのコピー処理の実行 Task.Run(Startup); }
private void Startup() { try { Set_CopyDirectory(copyFldName, pasteFldName);
} finally { BeginInvoke((Action)(() => { this.Close(); })); } }
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Main_Start(); // メインPG起動 }
private void Main_Start() { try { var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = @"C:\Main\Main.exe";
proc.Start(); // 1秒待機 proc.WaitForExit(1000);
} catch (System.Exception ex) { MessageBox.Show("メインPGが起動ができません"); } }
static bool Set_CopyDirectory(string CopyFld, string PasteFld) {
// 処理省略 }
} }
|