Обновить системную переменную с помощью vbscript / QTP

Я хочу установить системную переменную MQSERVER для подключения к MQ с помощью QTP. Каждый раз, когда это значение изменяется из QTP, мне нужно перезапускать QTP, чтобы отразить изменения.

Например. в окне системных переменных MQSERVER = ABCD

изменить переменную, используя

 Set objWSH = CreateObject("WScript.Shell")
 Set objSystemVariables = objWSH.Environment("SYSTEM") 
 objSystemVariables(MQVariableName) = MQVariableValue

Переменная установлена ​​правильно, но не отображается в коде QTP при подключении к websphere MQ.

Сразу после перезапуска QTP QTP правильно считывает переменную env. Не могли бы вы сообщить мне, как я могу использовать указанный ниже метод API. Я получаю несоответствие типа в QTP.

lnRetVal = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, "Environment", 2, 1000, Null) 'Getting type mismatch here

Обновление моего исходного вопроса кодом, который подключается к диспетчеру очередей.

Самая простая вещь, которую я пытаюсь сделать, это (что невозможно сделать без перезапуска QTP)

1) Подключитесь к администратору очередей

2) Ставим сообщение

3) Подключитесь к другому администратору очередей

4) Прочтите вывод

Const MQOO_OUTPUT = 16
 Const MQOO_INPUT_AS_Q_DEF = 1
 Set MQS = CreateObject("MQAX200.MQSession")                          
 Set QM = MQS.AccessQueueManager(Environment.Value("MQName")) 'This will pass the queue name and  access the queue manager.
 Set MQQueue = QM.AccessQueue(strQueName, MQOO_INPUT_AS_Q_DEF Or MQOO_OUTPUT)
 Set PutOptions = MQS.AccessPutMessageOptions()
 PutOptions.Options = MQPMO_NO_SYNCPOINT
 Set PutMsg = MQS.AccessMessage() 
 PutMsg.CharacterSet = 1208
 PutMsg.MessageData = PutMsgStr 'the message text 
 PutMsg.ApplicationIdData = "INTF_0439B" 
 MQQueue.Put PutMsg, PutOptions 'write the message to queue.

Кроме того, моя версия websphere MQ - 7.0.1.8.


person Mithilesh Indurkar    schedule 19.06.2017    source источник
comment
Есть ли другой способ, которым мне не пришлось бы перезапускать QTP, чтобы отразить изменения переменных системной среды.   -  person Mithilesh Indurkar    schedule 19.06.2017
comment
Как выглядит код, который на самом деле подключается к MQ? Возможно, вы могли бы просто передать детали подключения непосредственно в программу, а не полагаться на переменную MQSERVER env.   -  person JoshMc    schedule 13.10.2017
comment
Что ж, я действительно сомневаюсь, что это можно сделать в QTP / VBScript. Насколько мне известно, QTP полагается на переменную окружения.   -  person Mithilesh Indurkar    schedule 13.10.2017
comment
Даже если вы сомневаетесь в этом, почему бы вам не опубликовать строки кода, которые подключаются к MQ, и позвольте мне посмотреть, могу ли я помочь вам с методом, который позволил бы вам передать детали программно.   -  person JoshMc    schedule 16.10.2017
comment
Другой вариант, если вам просто нужна возможность подключиться к более чем одному диспетчеру очередей, вы можете сделать это с помощью CCDT (Таблица определения клиентского канала). Переменная MQSERVER будет заменена двумя переменными MQCHLLIB (расположение файла CCDT) и MQCHLTAB (имя файла CCDT). Сам файл CCDT может иметь один или несколько определенных в нем каналов, связанных с именем администратора очередей. Затем приложению достаточно указать имя диспетчера очередей для подключения, и MQ будет искать сведения о канале через этот файл.   -  person JoshMc    schedule 16.10.2017
comment
CCDT имеет дополнительные преимущества перед MQSERVER в том, что вы можете установить все возможные настройки на стороне клиента, например, HBINT, SSLCIPH, SCYEXIT, ни одна из которых невозможна с MQSERVER.   -  person JoshMc    schedule 16.10.2017
comment
Хотя это может не ответить на ваш исходный вопрос о том, как заставить QTP обновлять значение переменной среды без перезапуска, это будет альтернативой этому в отношении деталей подключения IBM MQ. Если вы можете описать свой вариант использования, я могу написать более подробный ответ. Если вы можете предоставить версию клиентского программного обеспечения IBM MQ, которую вы используете, это также поможет мне дать лучший ответ, поскольку некоторые вещи изменились в более поздних версиях IBM MQ.   -  person JoshMc    schedule 16.10.2017
comment
Спасибо за это @JoshMc. Я обновил свой ответ, чтобы отразить то, о чем вы просили. Пожалуйста, дайте мне знать, если что-то еще требуется.   -  person Mithilesh Indurkar    schedule 17.10.2017
comment
Вы можете использовать таблицу каналов для выполнения этой задачи. Таблица каналов будет определяться двумя записями: qmgr, который вы вводите, и qmgr, из которого вы получаете. Затем в коде вы можете просто указать имя Qmgr в качестве ключа для поиска нужных сведений о подключении на вкладке. MQv7.0 не поддерживается с сентября 2015 года, рекомендуется перейти на более свежую версию, и преимуществом этого является то, что они поставляются с версией runmqsc только для клиента, которая позволяет создавать таблицу каналов только с клиентом. поддерживаемые инструменты. Скоро напишу гораздо более подробный ответ.   -  person JoshMc    schedule 18.10.2017
comment
Спасибо, @JoshMc, не могли бы вы мне еще помочь? Где я могу найти дополнительную информацию по этому поводу?   -  person Mithilesh Indurkar    schedule 26.10.2017