Запуск программы при вкл. компьютера

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Дальнейшие комментарии по поводу что могут пользователи с правами локального администратора, а чего не могут в этой теме объявляется оффтопиком, так как на любой отдельно взятый ключ реестра любому пользователю можно дать любые права персонально, в том числе без права изменения этих прав.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Я назвал чушью утверждение о том, что права админа нужны для работы на машине, т.к. дескать не будут работать другие проги. А НЕ про доступ в реестр, как пишеш ты:
Под откажутся работать я подразумевал, что они не смогут добавить себя в автозапуск, если нет прав за запись в реестр. Я не в коем случае не утверждал, что они вообще перестанут работать. Это должно быть и так понятно.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

С правами "Опытного пользователя" в реестр пишется (ф-ия RegSetValue(...)), но при перезагрузке не запускается. Можно здесь что-нибудь сделать?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

А ты туда верный путь к своей программе записываешь? Выкладывай сюда кусок кода, который производит подготовку данных и запись в реестр. Будем разбираться.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

Записываю следующим образом:

Код: Выделить всё

char aszApp[] = {"C:\\ras_z 1\\ras.exe"};

if( RegSetValue(HKEY_CURRENT_USER, 
	TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), REG_SZ,
	TEXT( aszApp ), sizeof( aszApp )) == ERROR_SUCCESS)
{
	…………………………………….
}
и второе … если также записывать вторую программу, то перезаписывается первая, а не добавляется вторая. Как бы дописывать вторую, не затирая первой.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Лена89, Вот тут нашел "исходник" этой самой RegSetValue.
Судя по тексту, во втором параметре надо передавать не только ветку реестра, но и имя переменной, которой присваивается значение (аналогия с файлами: путь [каталог] + имя).

Т.е. твой вызов должен выглядеть так:

Код: Выделить всё

char aszApp[] = {"C:\\ras_z 1\\ras.exe"};

if( RegSetValue(HKEY_CURRENT_USER, 
	TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\MyProggy"), REG_SZ,
	TEXT( aszApp ), sizeof( aszApp )) == ERROR_SUCCESS)
{
	…………………………………….
}
MyProggy - это имя переменной реестра. Может быть любое. Для записи еще одной программы в "авто-run" нужно будет использовать какое-то другое (уникальное) имя.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Вот описание спорного параметра из MSDN.

Код: Выделить всё

lpSubKey [in, optional] 

The name of a subkey of the hKey parameter. The function sets the default value of the specified subkey.

Key names are not case sensitive.

If this parameter is NULL or points to an empty string, the function sets the default value of the key identified by hKey.
То есть функция RegSetValue предназначена для того, чтобы устанавливать значение всего ключа (папки) в реестре. Значение всего ключа хранится в специальном entry с зарезервированным именем (Default). Таким образом, если к строке добавить ещё MyProggy, то в реестре в ключе Run создастся подключ MyProggy, а в него, в поле (Default) запишется путь к нашей программе. Это не то, что нам нужно.

Опять напоминаю о списке функций, которые я перечислял: там не упоминалась RegSetValue. Правильным будет следующий подход:

Код: Выделить всё

hKey = RegOpenKeyEx(путь к Run);
Если не смогли открыть (что врядли), то hKey = RegCreateKeyEx();
RegSetValueEx(hKey, "MyProggy", aszApp);
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

Спасибо господа!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Спасибо, кстати, можно говорить ещё и специальной кнопочкой "Спасибо" или с изображением весов (зависит от выбранной темы) над понравившемся сообщением ;)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

Буду иметь в виду! :)
Ответить