0

Windows の起動時に特定のプロセスを実行する必要があるアプリケーションを作成しました。プログラムへのパスを受け取り、それをレジストリに追加することでそれを行うメソッドを作成しました。これは方法です:

private void AddPathToStartUpPrograms(string path)
{
  string startUpPosition1 = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
  string startUpPosition2 = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce";
  RegistryKey k = Registry.LocalMachine.OpenSubKey(startUpPosition1, true);
  if (k != null)
  {
    k.SetValue("service", path);
  }
  k = Registry.LocalMachine.OpenSubKey(startUpPosition2, true);
  if (k != null)
  {
    k.SetValue("service", path);
  }

}

このコードは機能していますが、問題は、追加したプロセスがデスクトップの読み込みを停止させているように見えることです。デスクトップの読み込み中に背景の壁紙が読み込まれますが、アイコンは読み込まれません。タスク マネージャーにアクセスできます。起動プログラムに追加したプロセスを閉じると、デスクトップが「フリーズ」し、すべての読み込みが完了します。

奇妙なことに、プロセスを閉じても、デスクトップの読み込みが完了した後、プロセスが再び実行され、すべてが正常に実行されます。つまり、何らかの理由で 2 回実行されます。

私の質問は、デスクトップの読み込みが完了した後にのみプロセスを実行するように設定するにはどうすればよいですか?

4

2 に答える 2

1

Runと の両方でレジストリ キーを設定しているため、2 回実行されますRunOnce。毎回実行したい場合は、Runキーに設定するだけです。RunOnceキーは、(名前が示すように)一度だけ実行したいプログラムのためのものです。レジストリ エントリはRunOnce、OS の起動後に自動的に削除されます。

シェルが起動するまでプログラムを遅らせたい場合、最も簡単な方法は (少しハックですが)、プログラムの一番Thread.Sleep(60000)最初に a を置くことです。

より洗練されたソリューションが必要な場合は、こちらをご覧ください: C# - 起動後に Windows が "安定" するタイミングを知るには?

于 2013-07-29T07:44:53.290 に答える
0

RunOnce について言われたことは真実であり、解決策は単にそのレジストリ キーへの追加を削除することでした。それを削除して「実行」キーだけにパスを残した後、修正されました。

于 2013-07-29T08:42:48.677 に答える