2013-07-18 2 views
3

Я пытаюсь установить драйвер с удаленной структурой, которая позволяет запускать команды оболочки, порожденные как дочерние элементы приложения удаленного доступа/мониторинга на удаленной машине, выполняемые как cmd/c «команда». Но водитель отказывается устанавливать из-за функции безопасности, которая считает, что драйвер может быть небезопасным.Как запустить msi с SEE_MASK_NOZONECHECKS без перезагрузки

Водитель также имеет кавычки (пробелы в пути), поэтому его что-то вроде

Dim command: command = "\\\\server\\driver\\folder\\Autorun.exe" /passive /norestart"; 
Set retVal = remote.Shell(command) 

, который работает

cmd /c " "\\server\driver\folder\Autorun.exe" /passive /norestart" 

на удаленной машине

Я пытался и были проблемы используя setx SEE_MASK_NOZONECHECKS 1/m в предыдущем заявлении, я предполагаю, что подпроцесс не видит новых глобальных переменных среды, которые не были вокруг, когда он был начат, и не будет работать без перезагрузки. Я бы хотел избежать перезагрузки.

Я попытался запустить

cmd /c " set SEE_MASK_NOZONECHECKS=1 & "\\server\driver\folder\Autorun.exe" /passive /norestart" 

, но это не похоже на работу. Есть идеи?

ответ

0

В результате я установил «Запуск приложений и небезопасных файлов» для включения зоны Интернета в настройках Internet Explorer под безопасностью (пользовательский уровень), а затем экспортировал изменения из HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 3 в файл реестра и добавив его в regedit/s.

После этого я могу запустить установщик общего диска.

На днях я напишу файл реестра до минимума, я думаю.

P.S. Я считаю, что это приводит к тому, что IE по умолчанию запускает страницу предупреждения при запуске.

3

Вы немного потеряли в пути SEE_MASK_NOZONECHECKS. Это не переменная среды и не может быть переделана из командной строки, это опция для ShellExecuteEx(). Функция winapi, которую вы действительно используете для запуска программ. Не совсем понятно, какие программные средства у вас есть, использование в пакетном файле или VBScript не будет работать. Вам нужно, по крайней мере, сказать, VB.NET и вывести функцию. Вы можете получить необходимые объявления с веб-сайта pinvoke.net.

Давайте поговорим о том, что происходит на самом деле, вы можете найти более простое решение. Когда вы загружаете файл с интернет-сайта, Windows добавляет дополнительный поток в файл, указывающий, откуда пришел этот файл. В основном говорится, что «этот файл не вышел из безопасного места» и делает установщик драйверов неаккуратным. Это довольно важная функция, если вы думаете об этом, ваш пользователь собирается установить программное обеспечение, которое может сделать лот, у вас довольно много свободного владения машиной, если вы можете установить драйвер.

Если вы щелкните правой кнопкой мыши файл в проводнике и выберите Свойства, то вы увидите, что это в нижней части окна:

enter image description here

Все, что нужно, это нажать эту кнопку Разблокировать. Таким образом, это простой способ для вашего пользователя решить проблему. Вы можете задокументировать дополнительный шаг в инструкциях по установке. Кроме того, с тем преимуществом, что теперь пользователь взял на себя ответственность за возможность установки потенциально опасного кода.

Другие способы разблокировать файл - это Unblock-File command PowerShell и опция streams utility, -d SysInterals.

И вы, вероятно, должны рассмотреть возможность написания собственного установщика. Который сохранит драйвер, упакованный в установочный файл, чтобы он не обрабатывался Windows. И пользователь получает предупреждение, когда вместо этого запускает установщик. И он может быть подписан таким образом, чтобы у пользователя была определенная уверенность в том, откуда появился файл, и что он не запутался на пути к своей машине. Существует много утилит, которые помогут вам написать установщик, например InstallAware, InstallShield, NSIS и т. Д.

+0

Я пытаюсь автоматизировать установки драйвера из удаленный общий диск один из драйверов дает мне проблемы. –

+0

так будет проще всего вызвать сценарий powershell, который выдает ShellExecuteEx()? –

+0

Нет простого способа отключить все проверки зоны (обратите внимание, что это небезопасная тестовая коробка) –

1

Я прошу отличаться ответить Ганса:

Конечно, SEE_MASK_NOZONECHECKS является, а предопределенная переменная среды. Изменение его в процессе и затем запуск дочернего процесса (например, msiexec.exe), который по умолчанию наследует среду, имеет тот же результат, что и использование ShellExecuteEx(), и предоставляет SEE_MASK_NOZONECHECKS в качестве параметра структуры SHELLEXECUTEINFO. Первый способ является предпочтительным для админов или быстрых хаков, например. если вы работаете с пакетными или файлами сценариев, которые устанавливают переменную окружения, или когда окончательный вызов файла .msi, лежащего на небезопасном сетевом диске, не выполняется вашим собственным кодом.

Например:

@echo off  
set SEE_MASK_NOZONECHECKS=1 
call msiexec.exe /i "\\MY_UNC_DRIVE\installs\mysetup.msi /qb /L*v "c:\logs\mysetup.log" 
call "\\MY_UNC_DRIVE\installs\Just_another_setup.exe" 

Если вы уже используете ShellExecuteEx() в коде, то, конечно, пойти с параметром, как указано Ганс, потому что реализация его более закрытым. (Если вы используете CreateProcess(), подумайте об использовании ShellExecuteEx() вместо этого.

Возврат к переменной окружения. Обычно вы не можете влиять на среду уже запущенных процессов. Вы можете установить среду по умолчанию, используемую NEW обрабатывается командой «setx», используемой в вопросе. Но с «setx» вы не меняете среду для своего текущего процесса. Это была проблема, о которой идет речь. Для этого вам нужно использовать «set», как показано. Поэтому либо используйте обе команды друг после друга, либо вообще не используйте setx, потому что для запуска установки на чужих машинах не нужно делать постоянные изменения безопасности без запроса.

Для получения дополнительной информации о постоянных изменениях/зрения: см. https://superuser.com/questions/595211/removing-the-open-file-security-warning-in-windows-8/934283#934283

Важно: Как уже упоминалось, нет общего пути в Windows, чтобы влиять на процессы, которые уже запуска (только собственные определенные межпроцессного-связь может быть), поэтому важно, чтобы установить переменную окружения перед тем, начиная настройку, на которую будет оказано влияние.

Еще одна вещь: некоторые люди думают, что нужно использовать «SETLOCAL» в пакетном файле. Обычно это не обязательно. Изменения среды с помощью «набора» не являются постоянными и не включают «другие» процессы - они наследуются только для подпроцессов и, частично, для суперпроцессов. Но, когда абонент на первом уровне заканчивается, среда снова возвращается в исходное состояние.

0

Я считаю, что вам нужно поместить все в той же цитаты:

cmd /c "set SEE_MASK_NOZONECHECKS=1 & \\server\driver\folder\Autorun.exe /passive /norestart" 

Вы можете попробовать это и увидеть разницу в выходе:

cmd /c "echo foo & echo bar" 
cmd /c "echo foo" & "echo bar" 
Смежные вопросы