我正在尝试使用此代码在启动时运行我的程序
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 :(得分:0)
由于问题不明显,而且您提供的代码应该正常工作,我提供的替代方案对您来说可能看起来很丑,但值得一试。您可以创建一个快捷方式并将其放入" Startup"文件夹以便添加它,或删除快捷方式以阻止其启动。
您可以通过执行以下操作来创建快捷方式:
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
然后将其包含在课堂之外:
[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);
}
然后为了使用它,你可以简单地称它:
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);
这应创建一个快捷方式并将其放入启动文件夹路径中。正如我所说,这不是一个优雅的解决方案,但如果你在添加注册表时找不到问题的根源,这是值得的。