Microsoft Windows Webサイトの代わりにWSUSを使用した更新

Microsoftの代わりにwsusやローカルフォルダを検索したい何か案は?ここに私が持っているものがありますが、これはインターネットを使用しているWindows 更新sにのみ接続します。

更新

I FOUND OUT THE ANSWER WITH THE VBS script. The ssdefault server is set by group policy. So if I apply group policy to the WUA then I was able to make automatic 更新s based on WSUS. For the group policy steps go to: http://technet.microsoft.com/en-us/library/cc512630.aspx Make sure that specify intranet service location is pointing to your wsus server. In our case it was http://wsus for both the statistics and 更新 service.You also have to enable automatic 更新s like the article describes.

If you are going to use the C# code below make sure to change 更新SearchResult.Online = false; if ypu want to search WSUS instead of Online.Thanks for anybody that might have tried to answer this question.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WUApiLib;//this is required to use the Interfaces given by microsoft. 

//todo check isassigned and guids for the following and include them in the search.
//http://msdn.microsoft.com/en-us/library/ff357803(VS.85).aspx
//determine the size of the  更新 in mb

namespace MSHWindows更新Agent
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Analyzing your needs");
            更新sAvailable();
            if (Needs更新())
            {
                Enable更新Services();//enables everything windows need in order to make an 更新
                Install更新s(Download更新s());
            }
            else
            {
                Console.WriteLine("There are no 更新s for your computer at this time.");
            }
            Console.WriteLine("Press any key to finalize the process");
            Console.Read();
        }
        //this is my first try.. I can see the need for abstract classes here...
        //but at least it gives most people a good starting point.
        public static  void Installed更新s()
        {
            更新Session 更新Session = new 更新Session();
            I更新Searcher 更新SearchResult = 更新Session.Create更新Searcher();
            更新SearchResult.Online = true;//checks for 更新s online
            ISearchResult SearchResults = 更新SearchResult.Search("IsInstalled=1 AND IsHidden=0");
            //for the above search criteria refer to 
            //http://msdn.microsoft.com/en-us/library/windows/desktop/aa386526(v=VS.85).aspx
            //Check the remakrs section
            Console.WriteLine("The following 更新s are available");
            foreach (I更新 x in SearchResults.更新s)
            {
                Console.WriteLine(x.Title);
            }
        }
        public static void 更新sAvailable()
        {
            更新Session 更新Session = new 更新Session();
            I更新Searcher 更新SearchResult = 更新Session.Create更新Searcher();
            更新SearchResult.Online = true;//checks for 更新s online
            ISearchResult SearchResults = 更新SearchResult.Search(
            "IsInstalled=0 AND IsPresent=0 and IsAssigned=1  AND CategoryIDs contains 'E6CF1350-C01B-414D-A61F-263D14D133B4' OR CategoryIDs contains '0FA1201D-4330-4FA8-8AE9-B877473B6441'  ");
            //for the above search criteria refer to 
            //http://msdn.microsoft.com/en-us/library/windows/desktop/aa386526(v=VS.85).aspx
            //Check the remakrs section

            foreach (I更新 x in SearchResults.更新s)
            {
                Console.WriteLine(x.Title);
            }
        }
        public static bool Needs更新()
        {
            更新Session 更新Session = new 更新Session();
            I更新Searcher 更新SearchResult = 更新Session.Create更新Searcher();
            更新SearchResult.Online = true;//checks for 更新s online
            ISearchResult SearchResults = 更新SearchResult.Search("IsInstalled=0 AND IsPresent=0 and IsAssigned=1  AND CategoryIDs contains 'E6CF1350-C01B-414D-A61F-263D14D133B4' OR CategoryIDs contains '0FA1201D-4330-4FA8-8AE9-B877473B6441'");
            //for the above search criteria refer to 
            //http://msdn.microsoft.com/en-us/library/windows/desktop/aa386526(v=VS.85).aspx
            //Check the remakrs section
            if (SearchResults.更新s.Count > 0)
                return true;
            else return false;
        }
        public static 更新Collection Download更新s()
        {
            更新Session 更新Session = new 更新Session();
            I更新Searcher Search更新s = 更新Session.Create更新Searcher();

            ISearchResult 更新SearchResult = Search更新s.Search("IsInstalled=0 AND IsPresent=0 and IsAssigned=1  AND CategoryIDs contains 'E6CF1350-C01B-414D-A61F-263D14D133B4' OR CategoryIDs contains '0FA1201D-4330-4FA8-8AE9-B877473B6441'");
            更新Collection 更新Collection = new 更新Collection();
            //Accept Eula code for each 更新
            for (int i = 0; i < 更新SearchResult.更新s.Count; i++)
            {
                I更新 更新s = 更新SearchResult.更新s[i];
                if (更新s.EulaAccepted == false)
                {
                    更新s.AcceptEula();
                }
                更新Collection.Add(更新s);
            }
            //Accept Eula ends here
            //if it is zero i am not sure if it will trow an exception -- I havent tested it.
            if (更新SearchResult.更新s.Count > 0)
            {
                更新Collection DownloadCollection = new 更新Collection();
                更新Downloader Downloader = 更新Session.Create更新Downloader();

                for (int i = 0; i < 更新Collection.Count; i++)
                {
                    DownloadCollection.Add(更新Collection[i]);
                }

                Downloader.更新s = DownloadCollection;
                Console.WriteLine("Downloading 更新s... This may take several minutes.");


                IDownloadResult DownloadResult = Downloader.Download();

                更新Collection InstallCollection = new 更新Collection();
                for (int i = 0; i < 更新Collection.Count; i++)
                {
                    if (DownloadCollection[i].IsDownloaded)
                    {
                        InstallCollection.Add(DownloadCollection[i]);
                    }
                }
                Console.WriteLine("Download Finished");
                return InstallCollection;
            }
            else
                return 更新Collection;
        }
        public static void Install更新s(更新Collection Downloaded更新s)
        {
            Console.WriteLine("Installing 更新s now...");
            更新Session 更新Session = new 更新Session();
            更新Installer InstallAgent = 更新Session.Create更新Installer() as 更新Installer;
            InstallAgent.更新s = Downloaded更新s;

            //Starts a synchronous installation of the 更新s.
           //http://msdn.microsoft.com/en-us/library/windows/desktop/aa386491(v=VS.85).aspx#methods
            if (Downloaded更新s.Count > 0)
            {
                IInstallationResult InstallResult = InstallAgent.Install();
                if (InstallResult.ResultCode == OperationResultCode.orcSucceeded)
                {
                    Console.WriteLine("更新s installed succesfully");
                    if (InstallResult.RebootRequired == true)
                    {
                        Console.WriteLine("Reboot is required for one of more 更新s.");
                    }
                }
                else
                {
                    Console.WriteLine("更新s failed to install do it manually");
                }
            }
            else
            {
                Console.WriteLine("The computer that this script was executed is up to date");
            }

        }
        public static void Enable更新Services()
        {
            IAutomatic更新s 更新s = new Automatic更新s();
            if (!更新s.ServiceEnabled)
            {
                Console.WriteLine("Not all 更新s services where enabled. Enabling Now" + 更新s.ServiceEnabled);
                更新s.EnableService();
                Console.WriteLine("Service enable success");
            }


        }

    }
}

次のスクリプトを実行すると、WUAの構成を決定するのに役立ちます

'---------------------START-----------------------

' Einstellungen für die automatischen 更新s
' http://www.wsus.de/
' Version 1.05.04.1
' Translated quick and dirty into English Marco Biagini
' [email protected]
'--------------------------------------------
On Error Resume Next

Set objWshNet = CreateObject("Wscript.Network")

const HKCU = &H80000001
const HKLM = &H80000002

strDefComputer = lcase(objWshNet.ComputerName)

Set oArgs = WScript.Arguments
If oArgs.Count = 0 Then
 strComputer = InputBox("Please enter the name or IP address of the Computer that you want to check WSUS settings", "Automatic 更新s", strDefComputer)
Else
 strComputer = oArgs(0)
End If

If strComputer = "" Then
 WScript.Quit
End if

strComputer = lcase(strComputer)
if left(strComputer,2)="\\" then
 strComputer=right(strComputer,(len(strComputer)-2))
end if

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

If Err.Number <> 0 Then
 msgbox "Unable to connect to:" & VBCRLF & VBCRLF & "     " & strComputer & VBCRLF, vbCritical, "Communication Error"
 WScript.Quit
End If

Resultmsg = "**** Results of WUA Settings ****" & VBCRLF & VBCRLF

strMsg = "No Auto 更新:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "NoAuto更新"
If RegValueExists(strKeyPath, strValueName) Then
 oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
 Resultmsg = Resultmsg & strMsg & GetNoAuto更新(dwValue) & VBCRLF & VBCRLF
Else
 Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF & VBCRLF
End If

strMsg = "Use WU Server:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "UseWUServer"
If RegValueExists(strKeyPath, strValueName) Then
 oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
 Resultmsg = Resultmsg & strMsg & GetUseWUServer(dwValue) & VBCRLF

 If dwValue = "1" Then
  strMsg = "  - WSUS Server:  "
  strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新"
  strValueName = "WUServer"
  If RegValueExists(strKeyPath, strValueName) Then
   oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue
   Resultmsg = Resultmsg & strMsg & strValue & VBCRLF
  Else
   Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
  End If

  strMsg = "  - WU Status Server:  "
  strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新"
  strValueName = "WUStatusServer"
  If RegValueExists(strKeyPath, strValueName) Then
   oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue
   Resultmsg = Resultmsg & strMsg & strValue & VBCRLF
  Else
   Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
  End If
 Else
  Resultmsg = Resultmsg & VBCRLF
 End If
Else
 Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
 Resultmsg = Resultmsg & "  - Client configured to receive 更新s from windows更新.microsoft.com" & VBCRLF
End If

strMsg = "  - TargetGroup:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新"
strValueName = "TargetGroup"
 If RegValueExists(strKeyPath, strValueName) Then
  oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue
  Resultmsg = Resultmsg & strMsg & strValue & VBCRLF & VBCRLF
 Else
  Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF & VBCRLF
End If

strMsg = "AU Options:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "AUOptions"
If RegValueExists(strKeyPath, strValueName) Then
 oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
 Resultmsg = Resultmsg & strMsg & GetAUOptions(dwValue) & VBCRLF

 If dwValue = "4" Then
  strMsg = "  - Scheduled Install Day:  "
  strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
  strValueName = "ScheduledInstallDay"
  If RegValueExists(strKeyPath, strValueName) Then
   oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
   Resultmsg = Resultmsg & strMsg & getday(dwValue) & VBCRLF
  Else
   Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
  End If

  strMsg = "  - Planned Installation Time:  "
  strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
  strValueName = "ScheduledInstallTime"
  If RegValueExists(strKeyPath, strValueName) Then
   oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
   Resultmsg = Resultmsg & strMsg & dwValue &":00 - 24 hours 4:00 is 4 AM, 16:00 is 4 PM" & VBCRLF
  Else
   Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
  End If
 Else
   Resultmsg = Resultmsg & VBCRLF
 End If

Else
 Resultmsg = Resultmsg & strMsg & "Value is not configured" & VBCRLF
 strMsg = "  - Benutzerdefinierte Einstellung:  "
 strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Windows更新\Auto 更新"
 strValueName = "AUOptions"
 If RegValueExists(strKeyPath, strValueName) Then
  oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
  Resultmsg = Resultmsg & strMsg & GetAUOptions(dwValue) & VBCRLF

  If dwValue = "4" Then
   strMsg = "    - ScheduledInstallDay:  "
   strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Windows更新\Auto 更新"
   strValueName = "ScheduledInstallDay"
   If RegValueExists(strKeyPath, strValueName) Then
    oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
    Resultmsg = Resultmsg & strMsg & getday(dwValue) & VBCRLF
   Else
    Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
   End If

   strMsg = "    - ScheduledInstallTime:  "
   strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Windows更新\Auto 更新"
   strValueName = "ScheduledInstallTime"
   If RegValueExists(strKeyPath, strValueName) Then
    oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
    Resultmsg = Resultmsg & strMsg & dwValue &":00" & VBCRLF
   Else
    Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
   End If
  Else
    Resultmsg = Resultmsg & VBCRLF
  End If

 Else
  Resultmsg = Resultmsg & strMsg & "Not configured" & VBCRLF
 End If
End If

strMsg = "  - NoAUShutdownOption:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "NoAUShutdownOption"
If RegValueExists(strKeyPath, strValueName) Then
 oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
 Resultmsg = Resultmsg & strMsg & GetNoAUShutdownOption(dwValue) & VBCRLF & VBCRLF
Else
 Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF & VBCRLF
End If

strMsg = "AutoInstallMinor更新s:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "AutoInstallMinor更新s"
If RegValueExists(strKeyPath, strValueName) Then
 oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
 Resultmsg = Resultmsg & strMsg & GetAutoInstallMinor更新s(dwValue) & VBCRLF & VBCRLF
Else
 Resultmsg = Resultmsg & strMsg & "Value is not configured" & VBCRLF & VBCRLF
End If

strMsg = "DetectionFrequency:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "DetectionFrequency"
 If RegValueExists(strKeyPath, strValueName) Then
  oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
  Resultmsg = Resultmsg & strMsg &"Every " & dwValue &" Hours to search for 更新s"& VBCRLF
 Else
   Resultmsg = Resultmsg & strMsg & "Value is not configured"& VBCRLF
 End If

strMsg = "RebootRelaunchTimeout:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "RebootRelaunchTimeout"
 If RegValueExists(strKeyPath, strValueName) Then
  oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
  Resultmsg = Resultmsg & strMsg & dwValue &" Minutes to wait until system restart"& VBCRLF
 Else
   Resultmsg = Resultmsg & strMsg & "Value is not configured" & VBCRLF
 End If

strMsg = "RebootWarningTimeout:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "RebootWarningTimeout"
 If RegValueExists(strKeyPath, strValueName) Then
  oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
  Resultmsg = Resultmsg & strMsg & dwValue &" Minutes wait until system restart"& VBCRLF
 Else
   Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
End If

strMsg = "NoAutoRebootWithLoggedOnUsers:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "NoAutoRebootWithLoggedOnUsers"
If RegValueExists(strKeyPath, strValueName) Then
 oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
 Resultmsg = Resultmsg & strMsg & GetNoAutoReboot(dwValue) & VBCRLF
Else
 Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
 Resultmsg = Resultmsg & "  - Default: User will be presented with a 5 minutes countdown" & VBCRLF
End If

strMsg = "RescheduleWaitTime:  "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "RescheduleWaitTime"
If RegValueExists(strKeyPath, strValueName) Then
 oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
 If dwValue = "0" Then Resultmsg = Resultmsg & strMsg & "Value not configured: " & dwValue & VBCRLF & VBCRLF End If
 If dwValue = "1" Then Resultmsg = Resultmsg & strMsg & dwValue &" Minute" & VBCRLF & VBCRLF End If
 If dwValue > "1" and dwValue < "61" Then Resultmsg = Resultmsg & strMsg & dwValue &" Minutes" & VBCRLF & VBCRLF End If
 If dwValue > "60" Then Resultmsg = Resultmsg & strMsg & "Invalid Value" & dwValue & VBCRLF & VBCRLF End If
Else
 Resultmsg = Resultmsg & strMsg & "Not Configured" & VBCRLF & VBCRLF
End If


Resultmsg = Resultmsg & "http://www.wsus.de" & VBCRLF & "Die Infoseite zu Windows Server 更新s Services"

MsgBox Resultmsg,,strComputer

set oReg = nothing


Function GetNoAuto更新(Index)
 Select Case Index
  Case 0 GetNoAuto更新 = "0 - Auto 更新 applied by GPO"
  Case 1 GetNoAuto更新 = "1 - No Auto 更新 is applied by GPO"
  Case Else GetNoAuto更新 = "Invalid Entry"
 End select
End Function

Function GetUseWUServer(Index)
 Select Case Index
  Case 0 GetUseWUServer = "0 - Client is configured to receive 更新s from windows更新.microsoft.com"
  Case 1 GetUseWUServer = "1 - Client is configured to receive 更新s from your WSUS Server"
  Case Else GetUseWUServer = "Invalid Entry"
 End select
End Function

Function GetDay(Index)
 Select Case Index
  Case "0" GetDay = "Every Day"
  Case "1" GetDay = "Every Sunday"
  Case "2" GetDay = "Every Monday"
  Case "3" GetDay = "Every Tuesday"
  Case "4" GetDay = "Every Wednesday"
  Case "5" GetDay = "Every Thursday"
  Case "6" GetDay = "Every Friday"
  Case "7" GetDay = "Every Saturday"
  Case Else GetDay = "Invalid Entry"
 End select
End Function

Function GetAUOptions(Index)
 Select Case Index
  Case "0" GetAUOptions = "0"
  Case "1" GetAUOptions = "1 - Deaktiviert in den Benutzereinstellungen"
  Case "2" GetAUOptions = "2 - Notify before download and Install."
  Case "3" GetAUOptions = "3 - Autom. Download, notify before installation."
  Case "4" GetAUOptions = "4 - Autom. Download, install according to GPO settings."
  Case "5" GetAUOptions = "5 - Allow Local Administator installation and manual configuration."
  case Else GetAUOptions = "Invalid Entry"
 End select
End Function

Function GetNoAUShutdownOption(Index)
 Select Case Index
  Case 0 GetNoAUShutdownOption = "0 - '更新s are being installed and system will be restarted' user ill be notified"
  Case 1 GetNoAUShutdownOption = "1 - '更新s are being installed and system will be restarted' user will NOT be notified"
  Case Else GetNoAUShutdownOption = "Invalid Entry"
 End select
End Function

Function GetAutoInstallMinor更新s(Index)
 Select Case Index
  Case 0 GetAutoInstallMinor更新s = "0 - Automatic 更新s are not immediately installed"
  Case 1 GetAutoInstallMinor更新s = "1 - Automatic 更新s are immediately installed"
  Case Else GetAutoInstallMinor更新s = "Invalid Entry"
 End select
End Function

Function GetNoAutoReboot(Index)
 Select Case Index
  Case "0" GetNoAutoReboot = "0 - User Countdown of 5 Minutes"
  Case "1" GetNoAutoReboot = "1 - User will be notified before a system restart"
  case Else GetNoAutoReboot = "Invalid Entry"
 End select
End Function

Function RegValueExists(sRegKey, sRegValue)
  sRegKey = Trim(sRegKey)
  sRegValue = LCase(Trim(sRegValue))
  ' init value
  RegValueExists = False
  If oReg.EnumValues(HKLM, sRegKey, aValueNames, aValueTypes) = 0 Then
    If Not IsNull(aValueNames) Then
      For i = 0 To UBound(aValueNames)
        If LCase(aValueNames(i)) = sRegValue Then
          RegValueExists = True
        End If
      Next
    End If
  End If
End Function

Function RegKeyExists(sRegKey)
  sRegKey = Trim(sRegKey)
  If oReg.EnumValues(HKLM, sRegKey, aValueNames, aValueTypes) = 0 Then
    RegKeyExists = True
  Else
    RegKeyExists = False
  End If
End Function

'---------------------END-----------------------
15
誰が上記のC#コードを書いたのですか?
追加された 著者 T.Coutlakis,
私はこれを発見しました: msdn。 microsoft.com/en-us/library/windows/desktop/… ただし、ssManagedServerを設定するにはどうすればよいですか?私は現在その作業に取り組んでいます。
追加された 著者 hidden,
私が発見したもう一つのこと:私が行うとき:Console.WriteLine(UpdateSearchResult.ServerSelection.ToStrin&zwnj; g());結果はssDefaultです。私はそれを知った:ssDefault IUpdateSearcherによってのみ使用されます。検索呼び出しがデフォルトサーバーを検索する必要があることを示します。コンピュータが管理対象サーバーを持つように設定されている場合、Windows Updateエージェント(WUA)によって使用される既定のサーバーはssMangagedServerと同じです。コンピュータが管理対象サーバーを持つように設定されていない場合、WUAは、IUpdateServiceのIsRegisteredWithAUプロパティがtrueに設定されている最初の更新サービスを使用します
追加された 著者 hidden,
なぜ私はそれが悪いですか?
追加された 著者 hidden,
良い質問と自己回答。私はあなたの質問への実際の答えにソリューションを移動し、そのようにマークすることをお勧めします。
追加された 著者 KP.,

1 答え

私は、 SRV1 という名前のローカルサーバーからのすべての更新プログラムをWindows 7システムでのみ使用している単純なC#アプリケーションを作成しました。これは、Windows 7によってデフォルトでインストールされるASP.NET 3.5を使用します。

ソースの SRV1 をローカルwsusサーバーに変更するだけです。

Source code can be found here

3
追加された
私はプロジェクトをダウンロードしましたが、wsusからダウンロードされるものを暗示するコードは見当たりませんでした。
追加された 著者 hidden,