Моё меню Общее меню Сообщество Правила форума Все прочитано
Вернуться   uForum.uz > ИКТ и телеком > IT-индустрия > Софт > Программирование > .NET & ASP.NET
Сообщения за день Поиск
Знаете ли Вы, что ...
...инструкция по установке аватара описана в Правилах форума.
<< Предыдущий совет - Случайный совет - Следующий совет >>

.NET & ASP.NET Вопросы программирования .NET, ASP.NET, Web Services и других WEB-технологий .NET.


Ответить

 
Опции темы Опции просмотра
Старый 15.09.2008 01:17   #1  
Real ID Group
Аватар для Anton Papin
Оффлайн
ЧП RTT
armchair sitter
AKA:Light
Сообщений: 145
+ 136  25/15
– 8  5/2

UzbekistanОтправить сообщение для Anton Papin с помощью ICQОтправить сообщение для Anton Papin с помощью Skype™Мой мирFacebook
Icon24 Autorun (C#)

Думаю, поднимается вопрос весьма интересный для многих начинающих программистов.

Допустим, имеется некоторый проект приложения. Требуется добавить в проект возможность автозапуска приложения.

Желаемая реализация:

1. Прописывать приложение в [HKEY_CURRENT_USER/.../Windows/CurrentVersion/Run] при запуске exe-файла, при условии отсутствия такого ключа. Весьма желательно присутствие в настройках приложения возможности выключать автозапуск при помощи установки/снятия одной единственной галочки. Также весьма и весьма желательно иметь возможность запуска приложения в свёрнутом режиме, например многие Tools полезно держать только в Taskbar.

2. Ничуть не хуже вариант с созданием ярлыка к приложению в папке "Автозагрузка", пожелания те же.

По собственному опыту - работа с реестром в MSDN освещена не особенно ясно, поэтому автозапуск был решён при помощи создания ключа в реестре вида [ApplicationFolder]/<AppName>.exe при инсталляции. Такая возможность довольно явна видна при добавлении в Solution ещё одного проекта - инсталляционного. Других воможностей быстрый взгляд не нашёл, кроме того приложение запускается в развёрнутом виде, что открыто противоречит его функционалу...

Заранее благодарю всех отписавшихся.

С уважением.
__________________
Шел по серверной одмин. Вдруг видит - стоит горящий шредер. Пропустил он себя через него и сгорел.
Ответить 
Старый 15.09.2008 01:41   #2  
Аватар для Teem Gazeev
Оффлайн
Сообщений: 330
+ 174  231/104
– 0  0/0

Uzbekistan
Второй номер ezine журнала Хакер:

http://www.xakep.ru/post/33603/default.asp

Качаем номер (бесплатно) и читаем статью "Кодим твикер". Там как раз то, что доктор прописал:

http://www.xakep.ru/post/33603/X-magazine02.zip
Ответить 
Старый 15.09.2008 13:40   #3  
Real ID Group Ultimate ex-wild_John
Супермодератор
Аватар для German Stimban
Оффлайн
Центр программистов Bepro
Начальник отдела
Сообщений: 8,039
+ 4,910  6,509/2,845
– 298  135/90

UzbekistanОтправить сообщение для German Stimban с помощью ICQОтправить сообщение для German Stimban с помощью Skype™LiveJournal
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  
Open ID Group uParty Member
Аватар для Timur Naimov
Оффлайн
Сообщений: 412
+ 62  206/121
– 0  0/0

UzbekistanОтправить сообщение для Timur Naimov с помощью ICQОтправить сообщение для Timur Naimov с помощью YahooОтправить сообщение для Timur Naimov с помощью Skype™
Что касается реестра - Скопировано из 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.
Что касается свернутого режима. Есть контрол, называется NotifyIcon. Это иконка, которая будет отображаться в TaskBar'е, радом с часиками. Ну а главной форме прилождения выставляем свойства
Код:
this.ShowInTaskbar = false;
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
Таким образом при старте ничего кроме NotifyIcon в TaskBar'е не видно
Не надо сразу ругать MSDN, не жалейте времени на поиск....
Ответить 
Старый 15.09.2008 14:46   #5  
Known ID Group uParty Member
Аватар для Dolphin
Оффлайн
Imperium of Man
Inquisitor
Сообщений: 5,990
+ 5,680  4,442/2,033
– 128  137/102

Russian FederationОтправить сообщение для Dolphin с помощью ICQОтправить сообщение для Dolphin с помощью Skype™Facebook
Эх... а в наше наше время люди еще умели юзать поиск.

Код:
RegistryKey hk = Registry.CurrentUser;
  hk = hk.OpenSubKey("не помню положение Run");
  Object obp=hklm.SetValue("name", "path");
Изучено здесь (я си-шарп не знаю, теперь вижу, что деБилльный язык)
http://www.csharphelp.com/archives2/archive430.html
Ответить 
Старый 15.09.2008 16:52   #6  
Аватар для _TrachinuS_
Оффлайн
DataMicron Inc.
Manager-Programmer
Сообщений: 134
+ 17  12/11
– 0  0/0

MalaysiaМой мир
Цитата:
Сообщение от Eclipse Посмотреть сообщение
(я си-шарп не знаю, теперь вижу, что деБилльный язык)
Не суди книжку по обложке.
А про реестров, то согласен с решением. Но лутче копировать файл в авторан.
__________________
Те, кому нечего сказать, обычно говорят вдвое больше.
Ответить 
Старый 15.09.2008 17:08   #7  
Known ID Group uParty Member
Аватар для Dolphin
Оффлайн
Imperium of Man
Inquisitor
Сообщений: 5,990
+ 5,680  4,442/2,033
– 128  137/102

Russian FederationОтправить сообщение для Dolphin с помощью ICQОтправить сообщение для Dolphin с помощью Skype™Facebook
Цитата:
Сообщение от _TrachinuS_ Посмотреть сообщение
Не суди книжку по обложке.

hk = hk.OpenSubKey("не помню положение Run");

Мне именно это не понравилось... Результат функции присваивать объекту... Раз уж субкей, могло бы и само как-то присвоиться...
Ответить 
Реклама и уведомления
Старый 16.09.2008 07:08   #8  
Аватар для _TrachinuS_
Оффлайн
DataMicron Inc.
Manager-Programmer
Сообщений: 134
+ 17  12/11
– 0  0/0

MalaysiaМой мир
2 Eclipse
В данное время все ООП языки работают с объектами. Так и функции могут возвращать объекты. ИМХО, возвращение объекта через функцию делает код более устойчивым.
__________________
Те, кому нечего сказать, обычно говорят вдвое больше.
Ответить 
Старый 16.09.2008 20:41   #9  
Real ID Group
Аватар для Anton Papin
Оффлайн
ЧП RTT
armchair sitter
AKA:Light
Сообщений: 145
+ 136  25/15
– 8  5/2

UzbekistanОтправить сообщение для Anton Papin с помощью ICQОтправить сообщение для Anton Papin с помощью Skype™Мой мирFacebook
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 просто пропустил момент, когда моё приложение лезло в реестр. Ни одного предупреждения! А на инсталлятор ругается... Видимо уровень обращения к реестру более низкий, чем у антивируса... опасно блин!
__________________
Шел по серверной одмин. Вдруг видит - стоит горящий шредер. Пропустил он себя через него и сгорел.
Ответить 
Ответить




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By Branden
OOO «Единый интегратор UZINFOCOM»


Новые 24 часа Кто на форуме Новички Поиск Кабинет Все прочитано Вверх