C# で Windows 7 Panasonic Toughbook (タブレット) で使用する Windows フォーム ランチャー/更新/スプラッシュ スクリーン アプリケーションを開発しています。ランチャーはデスクトップと Toughbooks の 1 つで正常に動作します... ただし、「実環境」デバイスでのテストでは、最初の起動後にフォームが表示されるまでに 20 秒以上かかります。(フォームが表示されると、アプリが動作すると思われる方法で高速に進みます。)インストール後のデバイスでの最初の起動は高速ですが、最初の起動後は時間がかかります。
これは、USB経由で接続したり、ネットワークに接続したりできないデバイス上にあるため、これをテストする方法さえよくわかりません. アプリケーションがファイルを開くかどうかは問題ではないようです。実際、ほとんどの場合、アプリが開くだけで、次の更新を確認するには時期尚早であることがわかり、メインのアプリを起動して、自分自身を強制終了します。
現在のプロセスは次のようになります。
コンストラクタ:
public MyConstructor() { InitializeComponent(); }
フォーム ロード:
private void Form1_Load(object sender, EventArgs e)
{
if (!isLoaded)
{
System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap("parentApplication.exe.config"); //Path to your config file
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
log4net.Config.XmlConfigurator.Configure();
WebRequest.url = configManager.AppSettings.Settings["SURL"].Value;
// Set a timer to run the update process momentarily to allow the UI thread to update and display. (UI must be idle to run Timer)
updateTimer = new System.Timers.Timer(1000);
updateTimer.Elapsed += new ElapsedEventHandler(beginUpdate);
updateTimer.Enabled = true;
isLoaded = true;
}
}
更新プロセス
private void beginUpdate(Object sender, EventArgs e)
{
// If any of this fails, we still want to launch the main application.
try
{
// Prevent the timer from doing anything else.
updateTimer.Enabled = false;
string version = "0";
try
{
Version v = AssemblyName.GetAssemblyName("ParentApplication.exe").Version;
version = v.ToString();
}
catch
{
version = "0";
}
updateProgress(5);
DateTime buffer = DateTime.Now.AddMinutes(-5);
DateTime last = Convert.ToDateTime(configManager.AppSettings.Settings[lastCheck].Value);
int comp = DateTime.Compare(buffer, last);
if (comp < 0)
{
// Begin update process
updateApplication(version);
}
updateProgress(100);
System.Threading.Thread.Sleep(1000);
}
catch (Exception er)
{
logger.Error("Error in update application.", er);
}
// The updater can't update itself. Launch the external application
// to handle the updating of the updater. This application also launches
// the main executable.
Process sync = new Process();
sync.StartInfo.UseShellExecute = false;
sync.StartInfo.FileName = "FinishUpdate.exe";
sync.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
sync.StartInfo.Verb = "runas";
sync.Start();
Application.Exit();
}