0

更新をサイレントに処理するプログラムを作成しようとしています。私は wuapilib.dll を使用しています。これには多くのクラス (c#) が付属しています。プログラムの最初のリビジョンは次のとおりです (タイプミスの問題は無視してください。インターネットにアクセスできない別のコンピューター上にあるため、手で入力しています)。

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();

更新が既にダウンロードまたはインストールされている場合は無視してください。上記のロジックは省略しています。私の問題は、IUpdateInstaller ではサイレント インストールを強制できないことです。多くの更新では、ユーザーが確認ボックスをクリックする必要があります。IUpdateInstaller2 クラスはそうします (ここの 2 番目の投稿から取得しました) が、私の人生では、IUpdateInstaller2 オブジェクトを取得する方法を見つけることができません。何も返されないようで、Microsoft のドキュメントにはサンプル コードが含まれていません。大規模なグーグル検索は役に立たなかった。

私は本当に近いと思います-機能はそこにありますが、私はそれに完全にアクセスすることはできません.

ご協力いただきありがとうございます。

4

3 に答える 3

1

私はそれをチェックしました(というか、私はそうしました-それを機能させることについてあまり明確ではありませんでした)、そしてCreateUpdateInstallerはIUpdateInstallerだけを返し、他には何も返さないようです。

しかし、(中国のWebサイトで、興味深いことに)IUpdateInstallerをIUpdateInstalelr2に直接キャストするコードを見つけました。これにより、問題が解決しました。

助けてくれてありがとう

于 2011-08-22T15:35:36.973 に答える
0

別の質問に自分のアプリを投稿して、Windows 更新プログラムを検索し、ダウンロードしてからインストールしました。

参照: C# および WUAPI: BeginDownload 関数

以下を簡単に変更できます。

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();
}
}

次に処理します

Application.Close();

イベントが彼らのことをした後。たとえば、更新プログラムが見つからない場合は、アプリを閉じます。インターフェイスの非同期プロパティを使用して、非同期に必要なことを実行できるようにします。

お役に立てれば。

于 2013-02-28T03:19:37.900 に答える