Не удается скопировать файлы в Environment.SpecialFolder.Startup в WPF - PullRequest
2 голосов
/ 22 июля 2011

Чтобы приложение запускалось в Windows, я решил добавить ярлык в папку «Автозагрузка».

Я пытался использовать:

File.Move(AppDomain.CurrentDomain.BaseDirectory + "ApplicationName.exe", Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "ApplicationName.lnk");

Это работает, но оно перемещает мой ярлыкне в нужную мне папку.

Environment.GetFolderPath(Environment.SpecialFolder.Startup)

работает хорошо, он возвращает:

C:\Users\Germanov\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Но мой ярлык появляется в

C:\Users\Germanov\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

Просто 1 папка "позади".

File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "ApplicationName.lnk");

тоже работает" странно ".Он фактически удаляет этот файл, но снова не в папке «Автозагрузка».

Если я попытаюсь вручную добавить «\ Автозагрузка» в путь, как показано ниже:

Environment.GetFolderPath(Environment.SpecialFolder.Startup) + @"Startup\ApplicationName.lnk"

Я получаю Систему.IO.Excseption.

Я не могу набрать этот путь вручную, я настроил свое приложение для работы на разных ПК с разными версиями Windows.Я также не могу использовать Registry для запуска моего приложения при запуске Windows.

Я использую Windows 7, Visual Studio 2010, .NET 4.0, это проект WPF.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Пробовали ли вы Environment.SpecialFolder.CommonStartup вместо автозагрузки, я не знаю, почему запуск не работает по вашему требованию. Большая часть установочного пакета делает это для вас; почему ты хочешь сделать это для себя? Любая причина не для использования реестра?

Я попробовал этот код на моей машине

var startup = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup);
string file = Path.Combine(startup, "MyApp.lnk");
using (StreamWriter sw = new StreamWriter(file))
{
sw.WriteLine("Test");
}

И это происходит при моем запуске

enter image description here

2 голосов
/ 22 июля 2011

Вы должны использовать System.IO.Path.Combine (), чтобы не создавать StartupApplication1.exe.Обратите внимание на отсутствующую обратную косую черту.

...