这是我的代码,如果快捷方式不存在,我需要我的服务在用户桌面上创建应用程序的快捷方式。当我在 Visual Studio 中调试应用程序时,它会将快捷方式放在我的桌面上,但是当我在 Windows 上运行该服务时,它总是会将快捷方式放在 C 驱动器上而不是我的桌面上。
private void CreateShortcut()
{
object shDesktop = (object)"Desktop";
WshShell shell = new WshShell();
//string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string shortcutAddress = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\CadEisancy.lnk";
IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress);
shortcut.Description = "New shortcut for a Notepad";
shortcut.Hotkey = "Ctrl+Shift+N";
shortcut.TargetPath = @"C:\RankWindowsApp\RankWindowsApp\bin\Debug\RankWindowsApp.exe";
shortcut.IconLocation = @"C:\RankWindowsApp\Icon.ico";
shortcut.Save();
}
protected override void OnStart(string[] args)
{
//Create Shortcut On Desktop
CreateShortcut();
}
我的代码:
![我的代码][1]
解决方案是获取当前登录的用户会话代码,然后根据会话获取他的个人资料名称,最后我们可以指定他的桌面路径。
您的服务是如何配置的?如果您不是在用户帐户下运行,该服务将使用自己的配置文件,如您在输出中看到的那样。
我在下面的内容中回答了大部分类似的答案。如果您觉得有帮助,请看看。
从运行为
Service
的
NT AUTHORITY\SYSTEM
在本地计算机上创建桌面列表
public static List<string> GetComputerUsersWithDesktops()
{
List<string> desktops = new List<string>();
string path = string.Format("WinNT://{0},computer", Environment.MachineName);
using (var computerEntry = new DirectoryEntry(path))
{
foreach (DirectoryEntry childEntry in computerEntry.Children)
{
if (childEntry.SchemaClassName == "User")
{
string desktop = "C:\\Users\\" + childEntry.Name + "\\Desktop";
if (Directory.Exists(desktop))
{
desktops.Add(desktop);
}
}
}
}
return desktops;
}
有效桌面将输出为不带尾随的字符串列表
\
C:\Users\SAM\Desktop
C:\Users\DAVE\Desktop
在此示例中,我使用桌面路径将已存在的快捷方式复制到每个有效桌面
private static void CopyFirewallShortcut()
{
List<string> desktops = Env.GetComputerUsersWithDesktops();
foreach (string desktop in desktops)
{
string fw = desktop + "\\Firewall.lnk";
string fws = "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Administrative Tools\\Windows Defender Firewall with Advanced Security.lnk";
if (!File.Exists(fw) && File.Exists(fws))
{
File.Copy(fws, fw);
}
}
}
Tested on Windows 10 22H2 - 19045.4717