|
|
Знаете ли Вы, что ... | |
...инструкция по установке аватара описана в Правилах форума. | |
<< Предыдущий совет - Случайный совет - Следующий совет >> |
.NET & ASP.NET Вопросы программирования .NET, ASP.NET, Web Services и других WEB-технологий .NET. |
Ответить |
|
Опции темы | Опции просмотра |
15.09.2008 01:17 | #1 | ||
Думаю, поднимается вопрос весьма интересный для многих начинающих программистов.
Допустим, имеется некоторый проект приложения. Требуется добавить в проект возможность автозапуска приложения. Желаемая реализация: 1. Прописывать приложение в [HKEY_CURRENT_USER/.../Windows/CurrentVersion/Run] при запуске exe-файла, при условии отсутствия такого ключа. Весьма желательно присутствие в настройках приложения возможности выключать автозапуск при помощи установки/снятия одной единственной галочки. Также весьма и весьма желательно иметь возможность запуска приложения в свёрнутом режиме, например многие Tools полезно держать только в Taskbar. 2. Ничуть не хуже вариант с созданием ярлыка к приложению в папке "Автозагрузка", пожелания те же. По собственному опыту - работа с реестром в MSDN освещена не особенно ясно, поэтому автозапуск был решён при помощи создания ключа в реестре вида [ApplicationFolder]/<AppName>.exe при инсталляции. Такая возможность довольно явна видна при добавлении в Solution ещё одного проекта - инсталляционного. Других воможностей быстрый взгляд не нашёл, кроме того приложение запускается в развёрнутом виде, что открыто противоречит его функционалу... Заранее благодарю всех отписавшихся. С уважением.
__________________
Шел по серверной одмин. Вдруг видит - стоит горящий шредер. Пропустил он себя через него и сгорел. |
|||
|
Ответить |
15.09.2008 01:41 | #2 |
Сообщений: 330
+ 174
231/104
– 0
0/0
|
Второй номер ezine журнала Хакер:
http://www.xakep.ru/post/33603/default.asp Качаем номер (бесплатно) и читаем статью "Кодим твикер". Там как раз то, что доктор прописал: http://www.xakep.ru/post/33603/X-magazine02.zip |
|
Ответить |
15.09.2008 13:40 | #3 |
ex-wild_John
Супермодератор |
Anton Papin, хакер, пишущий кейлоггер?
Вариант первый - Process Start или Application Run в C#, который генерирует файл стандартными средствами командной строки и копирует его куда надо. Читать мануалы по перенаправлению вывода: echo Текст_который_нам_нужен > файл_который_нам_нужен. Так можно сгенерировать .reg файл, запустить его в невидимом режиме: @ имя_команды >null а затем удалить del имя_файла. Вариант второй - создать средствами C# bat-файл в папке C:\Documents and Settings\All Users\...\Автозагрузка. Вас этому обучали - как записать обычный текст в файл. Чтобы приложение запускалось не развёрнуто - это в настройках формы. А именно: WindowState=Minimazed ShowInTaskBar=false |
|
Ответить |
15.09.2008 14:31 | #4 |
|
Что касается реестра - Скопировано из MSDN
Example 2 The following code example stores values of several data types in an example key, creating the key as it does so, and then retrieves and displays the values. The example demonstrates storing and retrieving the default (nameless) name/value pair, and the use of defaultValue when a name/value pair does not exist. Код:
using System; using Microsoft.Win32; public class Example { public static void Main() { // The name of the key must include a valid root. const string userRoot = "HKEY_CURRENT_USER"; const string subkey = "RegistrySetValueExample"; const string keyName = userRoot + "\\" + subkey; // An int value can be stored without specifying the // registry data type, but long values will be stored // as strings unless you specify the type. Note that // the int is stored in the default name/value // pair. Registry.SetValue(keyName, "", 5280); Registry.SetValue(keyName, "TestLong", 12345678901234, RegistryValueKind.QWord); // Strings with expandable environment variables are // stored as ordinary strings unless you specify the // data type. Registry.SetValue(keyName, "TestExpand", "My path: %path%"); Registry.SetValue(keyName, "TestExpand2", "My path: %path%", RegistryValueKind.ExpandString); // Arrays of strings are stored automatically as // MultiString. Similarly, arrays of Byte are stored // automatically as Binary. string[] strings = {"One", "Two", "Three"}; Registry.SetValue(keyName, "TestArray", strings); // Your default value is returned if the name/value pair // does not exist. string noSuch = (string) Registry.GetValue(keyName, "NoSuchName", "Return this default if NoSuchName does not exist."); Console.WriteLine("\r\nNoSuchName: {0}", noSuch); // Retrieve the int and long values, specifying // numeric default values in case the name/value pairs // do not exist. The int value is retrieved from the // default (nameless) name/value pair for the key. int tInteger = (int) Registry.GetValue(keyName, "", -1); Console.WriteLine("(Default): {0}", tInteger); long tLong = (long) Registry.GetValue(keyName, "TestLong", long.MinValue); Console.WriteLine("TestLong: {0}", tLong); // When retrieving a MultiString value, you can specify // an array for the default return value. string[] tArray = (string[]) Registry.GetValue(keyName, "TestArray", new string[] {"Default if TestArray does not exist."}); for(int i=0; i<tArray.Length; i++) { Console.WriteLine("TestArray({0}): {1}", i, tArray[i]); } // A string with embedded environment variables is not // expanded if it was stored as an ordinary string. string tExpand = (string) Registry.GetValue(keyName, "TestExpand", "Default if TestExpand does not exist."); Console.WriteLine("TestExpand: {0}", tExpand); // A string stored as ExpandString is expanded. string tExpand2 = (string) Registry.GetValue(keyName, "TestExpand2", "Default if TestExpand2 does not exist."); Console.WriteLine("TestExpand2: {0}...", tExpand2.Substring(0, 40)); Console.WriteLine("\r\nUse the registry editor to examine the key."); Console.WriteLine("Press the Enter key to delete the key."); Console.ReadLine(); Registry.CurrentUser.DeleteSubKey(subkey); } } // // This code example produces output similar to the following: // //NoSuchName: Return this default if NoSuchName does not exist. //(Default): 5280 //TestLong: 12345678901234 //TestArray(0): One //TestArray(1): Two //TestArray(2): Three //TestExpand: My path: %path% //TestExpand2: My path: D:\Program Files\Microsoft.NET\... // //Use the registry editor to examine the key. //Press the Enter key to delete the key. Код:
this.ShowInTaskbar = false; this.WindowState = System.Windows.Forms.FormWindowState.Minimized; Не надо сразу ругать MSDN, не жалейте времени на поиск.... |
|
Ответить |
15.09.2008 14:46 | #5 |
|
Эх... а в наше наше время люди еще умели юзать поиск.
Код:
RegistryKey hk = Registry.CurrentUser; hk = hk.OpenSubKey("не помню положение Run"); Object obp=hklm.SetValue("name", "path"); http://www.csharphelp.com/archives2/archive430.html |
|
Ответить |
16.09.2008 20:41 | #9 |
C реестром всё шоколадно, правда немного нелогично устроено удаление ключей из реестра - Registry.CurrentUser.CreateSubKey(...).DeveteValue("Value") - то есть мы создаём-удаляем ключ... Напоминает незабвенный машинный перевод хелпа о мыши в Win95, где download было переведено как вниз-грузить, если не ошибаюсь.
С созданием ярлыка всё не так шоколадно. Я открыл в блокноте произвольный файл lnk и нашёл там кроме прямой ссылки на файл ещё кучу нечитаемых символов - судя по всему это дополнительные свойства ярлыка, вроде иконки, хотя в принципе должна содержаться только ссылка, никаких нетекстовых параметров... MSDN по этому поводу подавленно молчит, по крайней мере та версия, что есть у меня (2005). Что писать в файл я не очень понимаю честно говоря... Вот пример содержания файла lnk: Код:
L А F“ рЦ1ЫИЙЄ[xЏЙћЙьШИЙ љ « PаOР к:iўШ +00ќ /E:\ @ 1 '9ПH Internet ( пѕм8›Є'9#r I n t e r n e t < 2 љ '9©H hfs.exe & пѕ'9«H'9jW h f s . e x e I 4 H КЈ9 Install E:\Internet\hfs.exe E : \ I n t e r n e t ` X lights ШѕИ<л~CЉkCНOYBvчјвЬё|ЭҐ~ ЫNh*FSMбI*RGЇ.GжH%wмјвЬё|ЭҐ~ ЫNh* P.S. никаких кейлоггеров я не пишу, программы у меня вполне открытые, а у автозупаска чисто практическое применение. P.P.S. был очень удивлён, когда Kaspersky 6 просто пропустил момент, когда моё приложение лезло в реестр. Ни одного предупреждения! А на инсталлятор ругается... Видимо уровень обращения к реестру более низкий, чем у антивируса... опасно блин!
__________________
Шел по серверной одмин. Вдруг видит - стоит горящий шредер. Пропустил он себя через него и сгорел. |
|
|
Ответить |
|