Не може да копира файлове в Environment.SpecialFolder.Startup в WPF

За да накарам приложението ми да стартира в Windows sturup, реших да сложа пряк път към папката Startup.

Опитах се да използвам:

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");

също работи "странно". Той всъщност изтрива този файл, но отново не в папката "Startup".

Ако се опитам ръчно да добавя "\Startup" към пътя по следния начин:

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

Получавам System.IO.Excception.

Не мога да напиша този път ръчно, искам приложението ми да работи на различни компютри с различни версии на Windows. Също така не мога да използвам системния регистър, за да накарам приложението ми да стартира със стартиране на Windows.

Използвам Windows 7, Visual Studio 2010, .NET 4.0, това е WPF проект.

Някакви идеи?


person Pavlo Hermanov    schedule 22.07.2011    source източник
comment
Моля, публикувайте кода, който използвате за създаване на пряк път.   -  person Security Hound    schedule 22.07.2011
comment
Взех го от тук: stackoverflow.com/ въпроси/234231/   -  person Pavlo Hermanov    schedule 22.07.2011


Отговори (2)


Опитахте ли Environment.SpecialFolder.CommonStartup вместо Startup, не знам защо стартирането не работи за вашите изисквания. Повечето инсталационни пакети правят това вместо вас; защо искаш да направиш това за себе си? Има ли причина да не използвате регистъра?

Опитах този код на моята машина

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

И идва при стартирането ми

въведете описание на изображението тук

person Anuraj    schedule 22.07.2011
comment
CommonStartup има същия проблем. Той копира файла в C:\ProgramData\Microsoft\Windows\Start Menu\Programs. - person Pavlo Hermanov; 22.07.2011
comment
CommonStartup има същия проблем. Той копира файла в C:\ProgramData\Microsoft\Windows\Start Menu\Programs. Искам да направя това ръчно, за да дам на потребителите възможност да изключват и включват тази функция. Не искам да използвам регистъра, защото достъпът до него може да бъде блокиран за различни потребители. - person Pavlo Hermanov; 22.07.2011
comment
Вижте моята папка Startup в менюто Start - person Anuraj; 22.07.2011
comment
Благодаря много, кодът ви работи добре. Използвах File.Copy(), вместо да използвам StreamWriter, и файл appers в правилната папка. Мисля, че става дума за Path.Combine(), но не разбирам как работи. Благодаря отново. - person Pavlo Hermanov; 22.07.2011
comment
Добре дошли. Направете го отговор :) - person Anuraj; 22.07.2011
comment
Има ли причина да не използвате регистъра? WTF? Защо, за бога, ще ровите в регистъра, когато има документиран, поддържан API за правене на точно това, което искате? (А с по-малко код?) - person Joe White; 22.07.2011

Трябва да използвате System.IO.Path.Combine(), за да не създадете StartupApplication1.exe. Обърнете внимание на липсващата обратна наклонена черта.

person Hans Passant    schedule 22.07.2011