Как я могу получить путь к рабочему столу пользователя из служб Windows?

Это мой код, мне нужна моя служба, чтобы сделать ярлык для приложения на рабочем столе пользователя, если ярлык не существует. когда я отлаживаю свое приложение в 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]


person Tawfeeq Amarneh    schedule 31.08.2019    source источник
comment
Привет! Пожалуйста, разместите свой код в блоке code, а не в виде изображения.   -  person div    schedule 31.08.2019
comment
Дублировать в stackoverflow. ком/вопросы/22232646/   -  person Lex Li    schedule 01.09.2019
comment
@LexLi Это не дублируется.   -  person Tawfeeq Amarneh    schedule 01.09.2019
comment
Если вы копнете дальше, вы поймете, почему этот дубликат. Изоляция сеансов Windows — это сложная концепция, которую большинство разработчиков не осознают, но каждый, кто пишет службы Windows, должен изучить ее, иначе на такие вопросы, как ваш, не будет ответа/решения. Связанная ветка уже содержит необходимую справочную информацию.   -  person Lex Li    schedule 01.09.2019


Ответы (2)


Решение состоит в том, чтобы получить текущий зарегистрированный код сеанса пользователя, затем получить имя его профиля в зависимости от сеанса, и, наконец, мы можем указать его путь к рабочему столу.

person Tawfeeq Amarneh    schedule 04.09.2019

Как настроен ваш сервис? Если вы не работаете под учетной записью пользователя, служба будет использовать свой собственный профиль, как вы видите в выводе.

Я ответил в основном на аналогичный ответ в следующем виде. Пожалуйста, посмотрите, если вы чувствуете, что это помогает.

https://stackoverflow.com/a/46540108/1556780

person Praveen M    schedule 04.09.2019
comment
Спасибо. Решение состоит в том, чтобы получить текущий зарегистрированный код сеанса пользователя, затем получить имя его профиля в зависимости от сеанса, и, наконец, мы можем указать его путь к рабочему столу. - person Tawfeeq Amarneh; 05.09.2019