2017-08-24 14 views
0

私が再起動したときに、私は、スタートアップそれが追加され、何の問題もなく、キーを削除しの追加プログラムは(C#)を動作していないレジストリフォルダを起動する

if (Properties.Settings.Default.runonstartup) 
{ 
     key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
     key.SetValue("PrintScreenSharp", Application.ExecutablePath.ToString()); 
     key.Close(); 
     } 
else 
{ 
     key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
     key.DeleteValue("PrintScreenSharp"); 
} 

で私のプログラムを実行するには、このコードを使用しようとしたが、よコンピュータはプログラムを実行しません。タスクマネージャをチェックすると、それは私のプログラムがリストされ、有効になっていますが、実際には "プログラム"と奇妙にラベル付けされています。実際の名前は "PrintScreen#"ではありません。

私はこれがなぜそうかもしれないかに関してある程度の時間を探していましたが、私は運がなかった。あなたはそれを自分で試してみたい場合はここで

は、プログラムは次のとおりです。

http://box.endurehosting.com/contents/public/PrintScreen%23.exe

+0

すべての準備が整う前に、実行グループが原因で失敗する可能性がありますか?あなたのアプリから見えるログファイルはどれですか? – BugFinder

+0

私はそうは思わない、私はイベントログをチェックし、私のプログラムの言及は見ない。私は5時間前にインストールされているウィンドウのコピーについても言及すべきだと感じています。ちょうどそれが得ることができるように株式として。 – Syllith

+0

あなたはスケジュールされたタスクの下でログインして実行することを検討しましたか?あなたは何もしていないダミーのアプリを試してみましたが、それが働いていることを確認するために "私はこれをしました"と言って一時ファイルに書き込むと言っています - デスクトップが本当に利用可能になる前に、 – BugFinder

答えて

0

問題が表示されていないとあなたが提供されているコードは大丈夫作業しなければならないので、私は見えるかもしれない代替手段を提供していますあなたに醜いが、それはショットの価値がある。ショートカットを作成して「スタートアップ」フォルダに入れて追加するか、ショートカットを削除して起動を停止することができます。あなたは、単に呼び出すことができ、

[ComImport] 
[Guid("00021401-0000-0000-C000-000000000046")] 
internal class ShellLink 
{ 
} 
[ComImport] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
[Guid("000214F9-0000-0000-C000-000000000046")] 
internal interface IShellLink 
{ 
    void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags); 
    void GetIDList(out IntPtr ppidl); 
    void SetIDList(IntPtr pidl); 
    void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName); 
    void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); 
    void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); 
    void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); 
    void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath); 
    void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); 
    void GetHotkey(out short pwHotkey); 
    void SetHotkey(short wHotkey); 
    void GetShowCmd(out int piShowCmd); 
    void SetShowCmd(int iShowCmd); 
    void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); 
    void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); 
    void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved); 
    void Resolve(IntPtr hwnd, int fFlags); 
    void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); 
} 

し、それを使用するために:

using System.Runtime.InteropServices; 
using System.Runtime.InteropServices.ComTypes; 

をしてから、クラスのこの外のものがあります。

次の操作を行うことにより、ショートカットの作成を達成することができますそれ:

IShellLink link = (IShellLink)new ShellLink(); 
link.SetDescription("description here"); 
link.SetPath(Application.ExecutablePath); 

IPersistFile file = (IPersistFile)link; 
string StartupFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup); 
file.Save(Path.Combine(StartupFolderPath, "NAME OF SHORTCUT.lnk"), false); 

文字列パスを取得するには、

Environment.GetFolderPath(Environment.SpecialFolder.Startup); 

これは、ショートカットを作成し、スタートアップフォルダパスに配置する必要があります。私が言ったように、それは洗練された解決策ではありませんが、レジストリを追加する際に問題の根本を見つけることができなければ、これは価値があります。

関連する問題