windows - Brug WUAPI til at installere opdateringer i C #

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at oprette et program, der vil håndtere opdateringer lydløst. Jeg bruger wuapilib.dll, som kommer med en række klasser (c #). Min første revision af programmet var som følger (ignorere typografiproblemer - det er på en anden computer uden internetadgang, så jeg skriver det manuelt):


IUpdateSession mySess = new UpdateSession();
IUpdateSearcher mySear = mySess.CreateUpdateSearcher();
ISearchResult myRes = mySear.Search("Type='Software'");
IUpdateDownloader myDown = mySess.CreateUpdateDownloader();
IUpdateInstaller myInst = mySess.CreateUpdateInstaller();

myDown.Updates = myRes.Updates;
myDown.Download();
myInst.Updates = myRes.Updates;
myInst.Install();


Ignorer det tilfælde, hvor en opdatering allerede er hentet eller installeret, ignorerer jeg logikken ovenfor. Mit problem er, at IUpdateInstaller ikke tillader dig at tvinge en stille installation - et antal opdateringer kræver, at en bruger klikker på en bekræftelsesboks. IUpdateInstaller2-klassen gør det (jeg har det fra den anden post her nede), men for mit liv kan jeg ikke finde en måde at få et IUpdateInstaller2-objekt på. Intet synes at returnere en, og Microsoft's dokumentation indeholder ikke Enhver eksempelkode. Omfattende googling returnerede intet til brug. [4]


Jeg synes jeg er meget tæt - funktionaliteten er der, jeg kan bare ikke få adgang til det.


Tak for din hjælp.

Bedste reference


Jeg kontrollerede, at (eller rettere sagt jeg tror jeg gjorde - ikke var forklaret på at få det til at fungere), og det ser ud til, at CreateUpdateInstaller kun returnerer en IUpdateInstaller, intet andet.


Imidlertid fandt jeg kode (på en kinesisk hjemmeside, interessant nok), som lige direkte kaster IUpdateInstaller til en IUpdateInstalelr2, som har løst mine problemer.


Tak for hjælpen

Andre referencer 1


Jeg har indsendt i et andet spørgsmål min app til, søg, download og derefter installere Windows opdateringer.


Se: C # og WUAPI: StartDownload funktion


du kan nemt ændre:


static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.SetCompatibleTextRenderingDefault(false);
Application.EnableVisualStyles();

Thread thread = new Thread(() =>
{
Form1 form1 = new Form1();
form1.Visible = false;
form1.ShowInTaskbar = false;
Application.Run(form1);
});

thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
}


derefter håndtere


Application.Close();


efter begivenhederne har gjort deres ting. Hvis der f.eks. Ikke er fundet opdateringer, skal du lukke appen. Jeg bruger grænsefladernes asyncegenskaber, så det kan gøre, hvad den skal asyncere.


Håber dette hjælper.