2012-02-28 32 views
2

Windowsの起動時に起動するアプリケーションを作成しました。私はHKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ RunのWindows登録簿にエントリを追加しました。エントリが正常に追加されましたが、プログラムが正しく開始していません。Windows 7起動時にプログラムを起動する(自動起動)

私はWindows 7 64ビットでアプリケーションをテストしました。 アプリケーションを実行するには管理者権限が必要ですが、これが起動していない理由が考えられますか?

私は、エントリの値は引用符ではありませんが、他の人がしていることも見ました。それは義務ですか?ここで

は、私のC#のコードです:

  var registry = Registry.CurrentUser; 
      var key = registry.OpenSubKey(runKeyBase, true); 
      key.SetValue(KEY, directory + @"\" + filename); 
      Registry.CurrentUser.Flush(); 

私はそれが動作しますどのようにカント?

+0

が重複する可能性を http://stackoverflow.com/questions/5127375/running-program-as-administrator-at-startup – Mohit

+0

あなたのパス場合いいえ、私のプログラムがまったく開始されていないため、重複していないその... – nosbor

+2

引用符が必要とされていますスペースが含まれています –

答えて

3

。起動時にこのため

、OSは単にあなたがレジストリ設定を行っている場合でも、アプリケーションを実行しません。

引用も必須ではありません。あなたはそうしてもいなくてもかまいません。私がやった

方法は、スタートアップフォルダにショートカットを配置することでした。レジストリ設定は機能しません。

はまた、あなたが試すことができます一つのことは、レジストリに設定してみてくださいそして/ SYSTEM32または/ウィンドウ内のファイルを配置してあります。

+0

あなたはこれに関する詳細を教えていただけますか?今、管理プロパティとして実行をクリックして、これはあなたがこれを行う場合、あなたのexeはマニフェストファイルを必要としないことを意味しますか?また、UACが完全に有効になっている場合(デフォルト設定)、これは実際に動作しますか。 VistaとWin7の両方でUACをデフォルト設定で使用できますか? また、system32とwindows dirsについては、これは実際に動作しますか?だから、私は最初の実行時に昇格モードを得ることができます(問題ありません)。その後、レジストリの変更を高くすることができます。しかし、再起動/ 2回目にUACがプログラムをブロックします。これらのdirsの自動スタートの場所が問題を解決するでしょうか? –

+0

adminとしてアプリケーションを実行すると、UACはプロンプトを表示せず、マニフェストファイルを埋め込む必要はありません。マニフェストファイルは、ダブルクリックするだけでアプリケーションを実行するためにプレミッションを設定する場合に必要です。ダブルクリックするか、単にファイルを開き、マニフェストファイルにrunasAdminが設定されている場合、ウィンドウは自動的に標高を求めます。同じことが最初に実行された後、他の時間に失敗した...私はあなたが起動時にそれを実行したい場合はアプリケーションに署名する必要があると思うが、私は支払うことを望んでいないので、それについて: – Dinesh

+0

良いアイデア、また、あなたはプロンプトを取り除くためにWindowsのタスクスケジューラを使ってみましたか? WIndowsが開発者とユーザーにこのバックドアを与えた理由を知らないでください。 upvoted。 –

5

スタートアップフォルダにショートカットを置くのはなぜですか?ショートカットを作成し、起動し、右クリックで実行しようとしているexeファイルに

移動:あなたはまた、管理者として

編集を実行するためのショートカットのプロパティを設定することができますこの方法。

そのショートカットのプロパティで、[管理者として実行]をオンにします。

その後(あなたは、スタートメニューのフォルダをエクスプローラクリックしてそこに着くことができます)スタートアップフォルダでこれを置きます。これにより、Windowsログイン時にそのアプリケーションが起動します。 UACに承認が必要な場合は、プログラムを実行しても問題ないかどうかを確認するメッセージが表示されます。私の知る限り、これは他のそれを開始するための唯一の署名のアプリケーションが管理者権限を要求しますことができますユーザーのアクセス制御設定が原因であることがわかりとして

+0

これについてもっと詳しく教えていただけますか?今、管理プロパティとして実行をクリックして、これはあなたがこれを行う場合、あなたのexeはマニフェストファイルを必要としないことを意味しますか?また、UACが完全に有効になっている場合(デフォルト設定)、これは実際に動作しますか。 VistaとWin7の両方でUACをデフォルト設定で使用できますか?ありがとう。 –

+0

起動時に実行するexeに移動し、右クリックしてショートカットを作成します。そのショートカットのプロパティで、[管理者として実行]チェックボックスをオンにします。これをスタートアップフォルダに置きます(スタートメニューのフォルダの[エクスプローラ]をクリックするとそこに移動できます)。これにより、Windowsログイン時にそのアプリケーションが起動します。 UACに承認が必要な場合は、プログラムを実行しても問題ないかどうかを確認するメッセージが表示されます。 – JeremyK

+1

ああ、スタートアップフォルダはきちんとしたトリックですが、管理オプションとして実行をショートカットに自動埋め込むことは別の素晴らしいアイデアです。マニフェストファイルを必要としないこの方法 - 興味のある人を使うためのすっきりしたトリックです。 Upvoted。 –

0

起動時にプログラムを自動で起動できます。ただ、最初に次のコードを実行します(それが有効になっていた場合)

public static void runAsAdmin(string[] args) 
    { 
     ProcessStartInfo proc = new ProcessStartInfo(); 

     if (args != null) 
      proc.Arguments = string.Concat(args); 

     proc.UseShellExecute = true; 
     proc.WorkingDirectory = Environment.CurrentDirectory; 
     proc.FileName = System.Reflection.Assembly.GetExecutingAssembly().CodeBase; 
     proc.Verb = "runas"; 



     bool isElevated; 
     WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
     WindowsPrincipal principal = new WindowsPrincipal(identity); 
     isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator); 

     if (!isElevated) 
     { 

      try 
      { 
       Process.Start(proc); 
      } 
      catch 
      { 
       //No Admin rights, continue without them 
       return; 
      } 
      //Close current process for switching to elevated one 
      Environment.Exit(0); 
     } 
     return; 
    } 

また、管理者権限を取得した後、あなたは、将来のサイレントスタートのためにUACの通知を無効にできます。 ため

private void disableUAC() 
    { 
     RegistryKey regKey = null; 

     try 
     { 
      regKey = Registry.LocalMachine.OpenSubKey(ControlServiceResources.UAC_REG_KEY, true); 
     } 

     catch (Exception e) 
     { 
      //Error accessing registry 
     } 


     try 
     { 
      regKey.SetValue("ConsentPromptBehaviorAdmin", 0); 
     } 
     catch (Exception e) 
     { 
      //Error during Promt disabling 
     } 


    } 
関連する問題