Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автозагрузка. Что не правильно? 
:(
    Опции темы
N0rt0N
Дата 22.5.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



Есть один заголовочный файл autorun.h который должен добавлять программу в автозагрузку. Но эта функция почему-то не выполняется :( Вот код этого файла:
Код

#define BUFF 0xFF
//-----------------------------------------------------------------
BOOL HKEYRecord        (char str[BUFF]);
BOOL MAKEService    (char str[BUFF]);
//-----------------------------------------------------------------
BOOL AddIntoSystem(char recname[BUFF], int type){
    if(type){
        if(MAKEService(recname)){
            return TRUE;
        }else{
            return FALSE;
        }
    }else{
        if(HKEYRecord(recname)){
            return TRUE;
        }else{
            return FALSE;
        }
    }
}
//-----------------------------------------------------------------
BOOL HKEYRecord(char recname[BUFF]){ 

    char str[BUFF];
    char tmpbuf[BUFF];
    char sysbuf[BUFF];

    GetModuleFileName(GetModuleHandle(NULL), str, BUFF);
    GetSystemDirectory(sysbuf, BUFF);
    strcat(sysbuf, "\\");
    strcat(sysbuf, MY_MACRO_RECORD_NAME);
    strcat(sysbuf, ".exe\0");
    CopyFile(str, sysbuf, true);
    HKEY rechk;
    RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &rechk);
    RegSetValueEx(rechk, (LPCSTR)recname, 0, REG_SZ, (LPBYTE)sysbuf, (DWORD)strlen(sysbuf)+1);
    RegCloseKey(rechk);
    delete(str, tmpbuf, sysbuf);
return TRUE;
}
//-----------------------------------------------------------------
BOOL MAKEService(char recname[BUFF]){

    char        str[BUFF];
    char        servicedir[BUFF];
    SC_HANDLE    servman;
    SC_HANDLE    service;

    GetModuleFileName(GetModuleHandle(NULL), str, BUFF);
    GetSystemDirectory(servicedir, BUFF);
    strcat(servicedir, "\\");
    strcat(servicedir, recname);
    strcat(servicedir, ".exe\0");
    if(!FileExist(servicedir)){
        CopyFile(str, servicedir, true);
        servman = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
        if(servman != NULL){
            service = CreateService(servman, MY_MACRO_SERVICE_NAME, MY_MACRO_SERVICE_NAME, 0, SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, servicedir, NULL, NULL, NULL, NULL, NULL);
            if(service != NULL){
                CloseServiceHandle(service);
                return TRUE;
            }
            CloseServiceHandle(service);
            return FALSE;
        }else{
            return FALSE;
        }
    }
    return FALSE;
}



Я так понял, что функция HKEYRecord() и должна осуществлять запись в реестр. Но почему-то не делает этого. Может быть кто нибудь может подсказать почему?
Заранее спасибо.
PM MAIL   Вверх
jonie
Дата 22.5.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



потому что неработает?
может нет прав вообще на запись....
вот к примеру рабочий код для авторегистрирования себя любимого... (вырезка)... вот и сравнивайте)...
Код

........
if(RegOpenKeyExW(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&hkLMR) != ERROR_SUCCESS){
        /* ошибка */
    }
    HKEY hkAUTO=0;
    char filename[MAX_PATH];
    int len = GetModuleFileName(GetModuleHandle(NULL),filename,MAX_PATH);
    if(RegSetValueEx(hkLMR,"somename",0,REG_SZ,(BYTE*)filename,len)!=ERROR_SUCCESS){
        /* ошибка */
        }
.........



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
-Kp0T-
Дата 23.5.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 23.2.2007

Репутация: 2
Всего: 2



Цитата(jonie @ 22.5.2007,  20:38)
потому что неработает?
может нет прав вообще на запись....
вот к примеру рабочий код для авторегистрирования себя любимого... (вырезка)... вот и сравнивайте)...
Код

........
if(RegOpenKeyExW(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&hkLMR) != ERROR_SUCCESS){
        /* ошибка */
    }
    HKEY hkAUTO=0;
    char filename[MAX_PATH];
    int len = GetModuleFileName(GetModuleHandle(NULL),filename,MAX_PATH);
    if(RegSetValueEx(hkLMR,"somename",0,REG_SZ,(BYTE*)filename,len)!=ERROR_SUCCESS){
        /* ошибка */
        }
.........

 Все работает (и RegOpenKeyExW и RegOpenKeyExA). Странный у тя баг. Попробуй GetLastError(), что выдаст...

Это сообщение отредактировал(а) -Kp0T- - 23.5.2007, 11:11
PM MAIL   Вверх
Dude03
Дата 23.5.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: 1
Всего: 6



Код

RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &rechk);

RegOpenKeyEx
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.