Страница 3 из 3

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

Добавлено: 21 май 2009, 13:12
Naeel Maqsudov
Дальнейшие комментарии по поводу что могут пользователи с правами локального администратора, а чего не могут в этой теме объявляется оффтопиком, так как на любой отдельно взятый ключ реестра любому пользователю можно дать любые права персонально, в том числе без права изменения этих прав.

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

Добавлено: 21 май 2009, 14:31
Romeo
&quot писал(а):Я назвал чушью утверждение о том, что права админа нужны для работы на машине, т.к. дескать не будут работать другие проги. А НЕ про доступ в реестр, как пишеш ты:
Под откажутся работать я подразумевал, что они не смогут добавить себя в автозапуск, если нет прав за запись в реестр. Я не в коем случае не утверждал, что они вообще перестанут работать. Это должно быть и так понятно.

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

Добавлено: 25 май 2009, 14:16
Лена89
С правами "Опытного пользователя" в реестр пишется (ф-ия RegSetValue(...)), но при перезагрузке не запускается. Можно здесь что-нибудь сделать?

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

Добавлено: 25 май 2009, 16:08
Romeo
А ты туда верный путь к своей программе записываешь? Выкладывай сюда кусок кода, который производит подготовку данных и запись в реестр. Будем разбираться.

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

Добавлено: 26 май 2009, 08:24
Лена89
Записываю следующим образом:

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

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)
{
	…………………………………….
}
и второе … если также записывать вторую программу, то перезаписывается первая, а не добавляется вторая. Как бы дописывать вторую, не затирая первой.

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

Добавлено: 26 май 2009, 10:20
BBB
Лена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" нужно будет использовать какое-то другое (уникальное) имя.

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

Добавлено: 26 май 2009, 11:24
Romeo
Вот описание спорного параметра из 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);

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

Добавлено: 26 май 2009, 20:11
Лена89
Спасибо господа!

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

Добавлено: 26 май 2009, 20:48
Romeo
Спасибо, кстати, можно говорить ещё и специальной кнопочкой "Спасибо" или с изображением весов (зависит от выбранной темы) над понравившемся сообщением ;)

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

Добавлено: 26 май 2009, 22:16
Лена89
Буду иметь в виду! :)