Windows가 Windows 업데이트가있는 경우 다운로드/설치 준비가되었는지 감지하는 가장 좋은 방법?

StackOverflow https://stackoverflow.com/questions/121585

  •  02-07-2019
  •  | 
  •  

문제

특히 Windows 2000/xp에 관심이 있지만 Vista/7도 흥미로울 것입니다 (다른 경우).

나는 배치 파일을 예약하거나 매일 동등한 작업 라인을 따라 생각하고있었습니다.

편집 : 죄송합니다. 더 많은 정보를 제공해야했습니다. 이 질문은 수동으로 업데이트를 적용하는 10 개의 기계와 관련이 있습니다. 프로그래밍 방식으로 업데이트를 설치하고 싶지는 않지만 배치 또는 스크립트를 사용하여 다운로드/설치 준비가 된 업데이트가 있는지 확인하십시오 (예 : 시스템 트레이의 업데이트 방패 아이콘이이를 나타냅니다). 감사.

도움이 되었습니까?

해결책 6

결국, Windows SU 옵션이 아니므로 배치 파일에서 다음을 사용하고 있습니다. Activestate ActivePerl (권장) :

perl -nle "print $ _ m/업데이트가 감지 된 경우/i"<c : windows windowsupdate.log

이것은 조잡하거나 더러워 질 수 있으며 앞으로는 깨질 수 있지만 현재 필요한 작업을 수행합니다.

모든 아이디어에 감사드립니다.

다른 팁

당신은 사용할 수 있습니다 WUApiLib:

UpdateSessionClass session = new UpdateSessionClass();

IUpdateSearcher search = session.CreateUpdateSearcher();

ISearchResult result = search.Search("IsInstalled=0 and IsPresent=0 and Type='Software'");

int numberOfUpdates = result.Updates.Count - 1;

Log.Debug("Found " + numberOfUpdates.ToString() + " updates");

UpdateCollection updateCollection = new UpdateCollection();

for (int i = 0; i < numberOfUpdates; i++)
{
    IUpdate update = result.Updates[i];

    if (update.EulaAccepted == false)
    {
        update.AcceptEula();
    }

    updateCollection.Add(update);
}

if (numberOfUpdates > 0)
{
    UpdateCollection downloadCollection = new UpdateCollection();

    for (int i = 0; i < updateCollection.Count; i++)
    {
        downloadCollection.Add(updateCollection[i]);
    }

    UpdateDownloader downloader = session.CreateUpdateDownloader();

    downloader.Updates =  downloadCollection;

    IDownloadResult dlResult = downloader.Download();

    if (dlResult.ResultCode == OperationResultCode.orcSucceeded)
    {
        for (int i = 0; i < downloadCollection.Count; i++)
        {
            Log.Debug(string.Format("Downloaded {0} with a result of {1}", downloadCollection[i].Title, dlResult.GetUpdateResult(i).ResultCode));
        }

        UpdateCollection installCollection = new UpdateCollection();

        for (int i = 0; i < updateCollection.Count; i++)
        {
            if (downloadCollection[i].IsDownloaded)
            {
                installCollection.Add(downloadCollection[i]);
            }
        }

        UpdateInstaller installer = session.CreateUpdateInstaller() as UpdateInstaller;

        installer.Updates = installCollection;

        IInstallationResult iresult = installer.Install();

        if (iresult.ResultCode == OperationResultCode.orcSucceeded)
        {
            updated = installCollection.Count.ToString() + " updates installed";

            for (int i = 0; i < installCollection.Count; i++)
            {
                Log.Debug(string.Format("Installed {0} with a result of {1}", installCollection[i].Title, iresult.GetUpdateResult(i).ResultCode));
            }

            if (iresult.RebootRequired == true)
            {
                ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");

                foreach (ManagementObject shutdown in mcWin32.GetInstances())
                {
                    shutdown.Scope.Options.EnablePrivileges = true;
                    shutdown.InvokeMethod("Reboot", null);
                }
            }
        }

Windows SU 네트워크의 여러 기계에 매우 잘 작동합니다.

"가장 쉬운"방법은 Windows 업데이트를 야간에 발생하도록 설정하고 사용 가능한 경우 업데이트를 다운로드 한 다음 시스템 트레이에 업데이트 방패 아이콘을 넣는 것입니다. 아이콘이 있는지 확인하기 위해 트레이를 한눈에 볼 수 있습니다.

또한 Windows를 설정하여 업데이트를 밤에 확인한 다음 지정된 시간에 다운로드하여 설치할 수도 있습니다.

Mdsindzeleta가 말한 것과 관련하여 - 프로그램적으로 진행하는 것은 아마도 최상의 솔루션이 아닐 것입니다. Windows XP에 내장 된 기능을 사용하여 업데이트를 다운로드하고 설치합니다. Vista에 비슷한 기능이 있다고 가정합니다.

Bits 서비스를 사용하여 Windows 업데이트가 다운로드된다고 생각합니다. Windows 지원 도구에서 찾은 BitsAdmin.exe를 사용할 수 있습니다. 명령 줄에서 bitsadmin.exe /list를 실행할 수 있으며 비트 작업 상태를 볼 수 있습니다. (즉, 다운로드 진행 상황, 직무 이름, 직무 상태)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top