|
|
|
Supreme Being
      
участник
Last Login: 06.03.2007 16:42
Сообщ.: 332,
Visits: 3 576
|
|
Добрый вечер уважаемые.
Интересует следующее :
есть ли возможность взаимодействия реестра с серверными языками, скриптами ?
Например, мне нужно при нажатии на 'button' записать инфу в реестр и чтобы никаких окон не выводилось и ничего не показывалось. Доступ к реестру есть.
В какую сторону следует копать ???
Спасибо.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Возможность чтения/записи в реестр есть. В разных языках это реализуется по разному. Поэтому уточни вопрос - в каком языке ты это хочешь делать?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 06.03.2007 16:42
Сообщ.: 332,
Visits: 3 576
|
|
Привет.
Нужно делать на ASP+VBS.
Пробовал делать вот что (пока на JS):
<%
var WSHShell = Server.CreateObject("WScript.Shell");
WSHShell.Run(Server.MapPath("test2.js"),5);
%>
где nest2.js (даже не работа с реестром) :
var vbOKCancel = 1;
var vbInformation = 64;
var vbCancel = 2;
var Message = "Вы действительно хотите запустить программу Notepad?";
var Title = "Подтвердите действие";
Welcome();
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("notepad",5);
function Welcome() {
var WSHShell = WScript.CreateObject("WScript.Shell");
var intDoIt;
intDoIt = WSHShell.Popup(Message,
0,
Title,
vbOKCancel + vbInformation );
if (intDoIt == vbCancel) {
WScript.Quit();
}
}
Ничего не пашет. Во время загрузки страницы просто в винде издается звук и все.
Если просто из винды запускаю файл test2.js - все работает ...
Других способов я не нашел.
С реестром тоже самое : есть файл reg.js
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer");
WSHShell.RegWrite("HKCU\\MyRegKey\\String", 1);
WSHShell.Popup("Создаем параметр DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\Binary", 3, "REG_BINARY");
Если его запускаю из винды, то все работает, а вот если из asp- страницы :
<%
var WSHShell = Server.CreateObject("WScript.Shell");
WSHShell.Run(Server.MapPath("reg.js"),5);
%>
Не работает и опять же издается звук в винде ...
Что не так я делаю ? И какие способы у Вас Василий ?
Спасибо.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Проблема скорее всего в правах на запись в реестр. Учетная запись от имени которой работает ASP не имеет возможности писать в корень раздела HKCU. Создай отдельный ключ и выдай на него права учетной записи IUSR_имяКомпа.
Кроме того ты зря пользуешься WSHShell.Run - лучше использовать Server.Execute или просто вызов функции. Непонятно зачем ты так усложняешь код.
И, наконец, бессмысленно пытаться вызывать диалоги из ASP - клиент их никогда не увидит. Не забывай что ASP на сервере выполняется и вызов WSHShell.Popup будет пытаться отобразить диалог на сервере, а не у клиента. Но и это у него не получится так как сервис IIS не имеет прав создавать окна на рабочем столе.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 06.03.2007 16:42
Сообщ.: 332,
Visits: 3 576
|
|
Доброй ночи.
Дело в том, что мне вставить нужно инфу (на сороне клиента) в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings.
> Создай отдельный ключ и выдай на него права учетной записи IUSR_имяКомпа.
Что за ключ, и где выдать права ?
> Кроме того ты зря пользуешься WSHShell.Run - лучше использовать Server.Execute или просто вызов функции. Непонятно зачем ты так усложняешь код.
Это был как пример работы WSH. Просто другого способа я не нашел. А Вы так и не ответили на вопрос, т.к сказали что у Вас есть ваприанты ...
>И, наконец, бессмысленно пытаться вызывать диалоги из ASP - клиент их никогда не увидит. Не забывай что ASP на сервере выполняется и вызов WSHShell.Popup будет пытаться отобразить диалог на сервере, а не у клиента. Но и это у него не получится так как сервис IIS не имеет прав создавать окна на рабочем столе.
Согласен, но я привел лишь пример, который работает с реестром ...
Поэтому вопрос остается в силе ....
Спасибо.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Раз тебе нужно работать с реестром на стороне клиента, то серверные технологии здесь никакой роли не играют. То что я писал относилось к случаю работы с реестром на стороне сервера.
Для работы с реестром на стороке клиента достаточно написать такой код
<script language="javascript">
var WSHShell = new ActiveXObject("WScript.Shell");
WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer");
WSHShell.RegWrite("HKCU\\MyRegKey\\String", 1);
WSHShell.Popup("Создаем параметр DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\Binary", 3, "REG_BINARY");
</script>
Но тут начинаются проблемы с правами на выполнение ActiveX. Чтобы этот код выполнился сайт должен находиться в зоне Trusted Sites причем пользователю будет задан вопрос разрешает ли он запуск потенциально небезопасного скрипта. Обойти его нельзя (официально во всяком случае), возможно есть какие-то уязвимости в IE позволяющие это сделать, но это неправильный путь.
Как вариант можно сделать js файл с вышеуказанным кодом, сделать на него ссылку и попросить пользователя выбрать команду "open" для запуска файла. Или написать hta файл и опять же попросить пользователя выполнить его.
Кстати, что именно ты хочешь поменять в настройках браузера? И для каких компьютеров? Если это нужно сделать в локальной сети, то существуют цивилизованные способы в виде групповой политики или WMI.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 06.03.2007 16:42
Сообщ.: 332,
Visits: 3 576
|
|
Чтобы исправить вот эту ошибку :
http://support.microsoft.com/default.aspx?scid=kb;en-us;181050
Нужно добавить в реестр параметр, иначе не будет работать синхронизация из-за таймаута.
Поэтому я и спросил, как это сделать через веб, потому как просто запускать файлик *.reg юзеры не будут. Поэтому нужно добавить этот параметр без их участия ...
Вот в чем вопрос ...
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Я тебе уже привел варинты решения - ссылка на js файл или hta файл. Но в любом случае тебе потребуется участие пользователя в этом процессе. Если бы веб приложение могло менять реестр без участия пользователя, то это была бы очень большая дыра.
И если компьютеры, на которых надо поменять эту настройку, находятся в локальной сети и включены в домен, то лучше пользоваться групповой политикой или login скриптом (то есть без участия веб).
|
|
|
| | |