2016-09-30 10 views
0

Я пытаюсь развернуть приложение через SCCM 2012 для Windows7 (x86 и x64), требующее уведомить пользователя о том, что его Microsoft Outlook должен быть закрыт раньше, чтобы продолжить с установкой. Это может быть либо с помощью параметра «Таймер», либо «Да/Нет», а затем, если пользователь нажмет «Да», он закроет Outlook и продолжит установку, иначе он отправит файл журнала, в котором пользователь отменит установку, но может быть повторенным в любое время.Сценарий для отображения всплывающего окна, а затем убивает процесс windows

До сих пор у меня только сценарий установки, который работает только для установки приложений с использованием сценария командной строки. Таким образом, он просто выполнит некоторые установки MSI и обновления Windows, а затем завершает работу.

У меня есть сценарий, который создает всплывающее окно и который может быть вызван моим CMD-файлом, является следующим VBScript и был взят из статьи TechNet.

Const TIMEOUT = 7 
Set objShell = WScript.CreateObject("WScript.Shell") 
Set objFS = WScript.CreateObject("Scripting.FileSystemObject") 

strPath = Wscript.FullName 
strFileVersion = objFS.GetFileVersion(strPath) 

iRetVal = objShell.Popup(Wscript.FullName & vbCrLf & _ 
"File Version: " & _ 
strFileVersion & vbCrLf & _ 
"Would you like to close Outlook application and continue with the installation?" _ 
,TIMEOUT,"Outlook Validation",vbYesNo + vbQuestion) 

Select Case iRetVal 
Case vbYes 
Set objFile = objFS.GetFile(strPath) 
objShell.Popup WScript.FullName & vbCrLf & vbCrLf & _ 
"File Version: " & strFileVersion & vbCrLf & _ 
"File Size: " & Round((objFile.Size/1024),2) & _ 
" KB" & vbCrLf & _ 
"Date Created: " & objFile.DateCreated & vbCrLf & _ 
"Date Last Modified: " & objFile.DateLastModified & _ 
vbCrLf,TIMEOUT 
Wscript.Quit 
Case vbNo 
Wscript.Quit 
Case -1 
WScript.StdOut.WriteLine "Popup timed out." 
Wscript.Quit 
End Select 

Поэтому я не знаю, есть ли какой-нибудь полезный пример, который я могу использовать и настроить его оттуда. Я невежественна, с завязанными глазами, я не вижу света. Хорошо, вы понимаете мое разочарование.

Любые идеи, примеры или ссылки будут действительно оценены! спасибо & добро пожаловать. Joel.

ответ

0

Это один из способов.

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process") 

For Each objItem in colItems 
    'msgbox objItem.name & " " & objItem.CommandLine 
    If LCase(objItem.name) = "outlook.exe" then 
     If Msgbox("Close Outlook", 33, "Install") = 1 then 
      objItem.terminate 
     End If 
    End If 
Next 

VBScript в файл справки - https://www.microsoft.com/en-au/download/details.aspx?id=2764

Для помощи с WMI использования объекта WMIC в командной строке.

wmic process get /? (такие же, как wmic path win32_process get /?) и wmic process call /? перечислите свойства и методы.

+0

Спасибо, лапша, я тоже проверю! – derspinne

0

Здесь моя процедура закрывает внешний вид перед изменением профиля. Is является частью сценария входа в систему. Шоу - процедура регистрации и информирования.

sub CloseOutlook 
    on error resume next 'to be able to log and continue 
    dim objWMIService, colProcessList, objProcess, sResult, oShell 
    set oShell   = WScript.CreateObject("WScript.Shell") 
    set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") 
    set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'OUTLOOK.EXE'") 

    for Each objProcess in colProcessList 
    show "outlook is being closed" 
    objProcess.Terminate() 
    if Err <> 0 then 
     show "Error while closing outlook: " & err.Description 
    end if 
    sResult = oShell.Popup("Outlook is being closed, profile is configured") 
    next 

end sub 

Если вы хотите получить подтверждение от пользователя, вам придется использовать MsgBox вместо этого.

+0

Спасибо, Питер, я посмотрю! – derspinne

+0

Не благодарите меня, дайте мне голосование 8 :) или лучше принимайте ответ, если он работает – peter

0

Я бы порекомендовал не беспокоиться о предупреждениях и закрытии Outlook, а вместо этого настроить рекламу для запуска, когда ни один пользователь не вошел в систему. Меньше шансов на проблемы или случайно пропущенных ситуаций «о нет, вы потеряли мои письма».

+0

Спасибо Мэтту за вашу рекомендацию, но уже было принято во внимание, что развертывание будет проверено на худших условиях, чтобы избежать каких-либо сбоев. Информировать пользователя о моем развертывании - лучший шанс избежать любого случая сбоя или вопросов вроде: «О, мое приложение еще не установлено, почему я единственный, отсутствующий в развертывании?» Ответ. После анализа файлов журнала вы не закрыли приложение Outlook, поэтому установка завершилась неудачно. – derspinne