既然問題是不可見的,您所提供的代碼應該沒事的工作,我準備了替代其外觀可能對你很醜,但它值得一試。您可以創建快捷方式並將其放入「啓動」文件夾中以添加它,或者刪除快捷方式以阻止其啓動。
您可以通過執行實現快捷的創建:
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);
這應該創建一個快捷方式並將其放入啓動文件夾路徑中。正如我所說,這不是一個優雅的解決方案,但如果在添加註冊表時找不到問題的根源,這是值得的。
由於運行團隊在一切準備就緒之前有可能踢進任何可能失敗的機會?從您的應用程序中查看任何日誌文件? – BugFinder
我不這麼認爲,我查過了事件日誌,看不到我的程序。我覺得我應該提及我運行的窗口的副本是5小時前安裝的。就像它可以得到的股票一樣。 – Syllith
你有沒有考慮過把它放在計劃任務下的登錄時運行?也有你試過一個虛擬的應用程序,幾乎沒有什麼,只是說寫臨時文件說「我做了這個」,以確認它正在工作 - 我想它的踢在桌面真的可用之前 – BugFinder