Jak rozmieścić moduł ValidatePath przy użyciu programu Systems Management Server 2003

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 887404 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

Moduł ValidatePath (VPModule.msi) instaluje na komputerach docelowych moduł protokołu HTTP o nazwie Microsoft.Web.ValidatePathModule.dll. W trakcie instalacji są także aktualizowane pliki Machine.config wszystkich zainstalowanych wersji systemu .NET Framework przy użyciu wpisu nowego modułu protokołu HTTP. Aby uzyskać dodatkowe informacje na temat pliku VPModule.msi, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
887289 Moduł protokołu HTTP wyszukuje problemy z zamianą na postać kanoniczną w środowisku ASP.NET

WPROWADZENIE

Narzędzie MBSA (Microsoft Baseline Security Analyzer) nie jest w stanie wykryć, czy poszczególne systemy wymagają zainstalowania pliku VPModule.msi. W związku z tym nie można przeprowadzić oceny zgodności za pomocą funkcji zarządzania aktualizacjami oprogramowania programu Microsoft Systems Management Server (SMS) 2003. Klienci korzystający z programu SMS powinni użyć standardowej dystrybucji oprogramowania w celu rozmieszczenia pliku VPModule.msi.
Skrypt wykrywający instalację modułu VPModule.msi ma następujące tryby działania:
  • Tylko skanowanie
  • Skanowanie i instalowanie

Tylko skanowanie

W trybie „Tylko skanowanie” skrypt wykrywający zostaje uruchomiony i ocenia, czy dany system wymaga modułu. Następnie generuje kody zwrotne stanu, które mogą zostać wykorzystane w raportach zgodności także przez program SMS.

UWAGA: Sekcja „Więcej informacji” zawiera zestaw przykładowych raportów. Dołączona jest także zawartość plików MOF (Managed Object Format), które są wymagane, aby generować te raporty.

Skrypt wykrywający może zostać rozmieszczony na dowolnym komputerze z programem SMS Advanced Client. Jeśli skrypt wykrywający zostanie wykonany na komputerze klienckim, który nie wymaga pliku VPModule.msi, nastąpi jego bezpieczne zakończenie.

Skanowanie i instalowanie

W trybie „Skanowanie i instalowanie” skrypt wykrywający określa zgodność systemu. Jeśli w systemie nie ma pliku VPModule.msi, skrypt rozpoczyna wykonywanie pliku MSI, aby zainstalować plik VPModule.msi. Plik MSI zwraca komunikaty o stanie, które mogą zostać wykorzystane przez program SMS. Komunikaty te mogą zostać wykorzystane do generowania raportów pokazujących postęp rozmieszczania w przedsiębiorstwie.

UWAGA: Po pomyślnym wykonaniu pakietu MSI w aplecie Dodaj i usuń programy w Panelu sterowania pojawia się wpis 'Microsoft ASP.NET ValidatePath Module'. W celu wykonania pakietu MSI nie trzeba ponownie uruchamiać systemu.

Faza 1: Przygotowanie

Rozwiązanie, które określa stan zgodności i instaluje rozwiązanie, składa się ze skryptu wykrywającego VPModuleScanner.js oraz pliku VPModule.msi. Konieczne jest utworzenie pakietu programu SMS zawierającego oba te pliki. Aby ułatwić tworzenie pakietu SMS i obiektów programu dla tego skryptu wykrywającego i modułu protokołu HTTP, w tej sekcji zamieszczono zawartość pliku definicji PDF (Package Definition File).

Następujący tekst należy skopiować i wkleić do pliku Notatnika, a następnie zapisać z rozszerzeniem .sms. Można go zapisać na przykład jako Aspnet.sms.
[PDF]
Version=2.0
[Definicja pakietu]
Publisher=Microsoft
Name=ASP .NET Scan and Install Package
Version=1.0
Language=ALL
Programs=Scan,Install,UnInstall
[Skanowanie]
Name=ASP .NET Scan
CommandLine=wscript //B vpmodulescanner.JS -o %TEMP%\aspnet.log
UserInputRequired=False
EstimatedRunTime=5
AdminRightsRequired=True
CanRunWhen=AnyUserStatus
SupportedClients=Win NT (I386)
Win NT (I386) MinVersion1=5.00.0000.0
Win NT (I386) MaxVersion1=5.00.9999.9999
Win NT (I386) MinVersion2=5.10.0000.0
Win NT (I386) MaxVersion2=5.10.9999.9999
Win NT (I386) MinVersion3=5.20.0000.0
Win NT (I386) MaxVersion3=5.20.9999.9999
[Instalowanie]
Name=ASP .NET Install
CommandLine=wscript //B vpmodulescanner.JS -o %TEMP%\aspnet.log -install
UserInputRequired=False
EstimatedRunTime=5
AdminRightsRequired=True
CanRunWhen=AnyUserStatus
SupportedClients=Win NT (I386)
Win NT (I386) MinVersion1=5.00.0000.0
Win NT (I386) MaxVersion1=5.00.9999.9999
Win NT (I386) MinVersion2=5.10.0000.0
Win NT (I386) MaxVersion2=5.10.9999.9999
Win NT (I386) MinVersion3=5.20.0000.0
Win NT (I386) MaxVersion3=5.20.9999.9999
[Dezinstalacja]
Name=ASP .NET UnInstall
CommandLine=msiexec /q /x "VPModule.msi"
UserInputRequired=False
EstimatedRunTime=5
AdminRightsRequired=True
CanRunWhen=AnyUserStatus
SupportedClients=Win NT (I386)
Win NT (I386) MinVersion1=5.00.0000.0
Win NT (I386) MaxVersion1=5.00.9999.9999
Win NT (I386) MinVersion2=5.10.0000.0
Win NT (I386) MaxVersion2=5.10.9999.9999
Win NT (I386) MinVersion3=5.20.0000.0
Win NT (I386) MaxVersion3=5.20.9999.9999



Aby utworzyć pakiet i obiekty programu, wykonaj następujące kroki:
  1. W konsoli administratora programu SMS kliknij pozycję Packages.
  2. Prawym przyciskiem myszy kliknij pozycję Packages, kliknij polecenie New, kliknij polecenie Package from Definition.

    Zostanie uruchomiony kreator Create Package from Definition Wizard. Użyj tego kreatora, aby utworzyć pakiet i obiekty programu. Zostanie wyświetlony monit o podanie utworzonego wcześniej pliku definicji pakietu. Aby zakończyć tworzenie pakietu, można także wybrać pliki źródłowe (VPModuleScanner.js i VPModule.msi).
  3. Gdy skończysz kroki kreatora, zostanie utworzony nowy pakiet Microsoft ASP.NET Scan and Install Package.

Faza 2: Skanowanie zgodności

Zalecamy, aby najpierw ocenić, w ilu systemach plik VPModule.msi ma zastosowanie i które systemy wymagają tego pliku.

Aby przeprowadzić skanowanie zgodności, należy najpierw utworzyć anons za pomocą programu ASP.NET Scan. Program ten znajduje się w pakiecie Microsoft ASP.NET Scan and Install.

Przed rozmieszczeniem go na szerszą skalę należy rozmieścić ten anons najpierw na grupie pilotażowej.

Po przeprowadzeniu skanowania zgodności w systemie klienckim pojawi się jeden z następujących kodów zwrotnych:
Zwiń tę tabelęRozwiń tę tabelę
0Moduł VPModule zainstalowany
20000Moduł VPModule wymagany
20001Nie znaleziono pliku konfiguracyjnego systemu .NET Framework
20002Wersja systemu .NET Framework nieobsługiwana przez moduł VPModule (ten kod zwrotny powinny zwracać tylko systemy zawierające przejściowe kompilacje systemu .NET Framework).
20003Brak możliwości potwierdzenia stanu wymagania modułu VPModule


Ważne Systemy, które wymagają pliku VPModule.msi, będą zwracały kod wyjścia 20000. Kod wyjścia 20000 jest kodem błędu. Standardowe raporty dystrybucji oprogramowania będą umieszczały te systemy w kategorii błędów. Poprawna reprezentacja stanu zgodności jest dostępna za pomocą przykładowych raportów.

Należy użyć przykładowych raportów znajdujących się w kategorii ASP.NET Scan - Advertisement Status, aby monitorować postęp rozmieszczania i wykonywania skryptu.

Generowanie raportu opisano w dalszej części tego artykułu.

Faza 3: Instalacja modułu

Znając liczbę niezgodnych systemów, administratorzy programu SMS mogą rozpocząć rozmieszczanie pliku VPModule.msi.

Należy utworzyć anons oparty na programie instalacyjnym programu ASP.NET. Anons ten spowoduje rozmieszczenie pakietu MSI, który instaluje moduł wymagany w przypadku tego problemu. Pakiet MSI zostanie wykonany w trybie nienadzorowanym, a ponowne uruchomienie systemu nie powinno być wymagane.

Ważne Systemy wymagające pliku VPModule.msi będą zwracały kod wyjścia 20000. Kod wyjścia 20000 jest kodem błędu. Standardowe raporty dystrybucji oprogramowania będą umieszczały te systemy w kategorii błędów. Poprawna reprezentacja stanu zgodności jest dostępna za pomocą przykładowych raportów.

Należy użyć przykładowych raportów znajdujących się w kategorii ASP.NET Scan - Advertisement Status, aby monitorować postęp rozmieszczania i wykonywania skryptu.

Opcja dezinstalacji

Pakiet MSI ma również opcję dezinstalacji. Należy jej używać tylko w systemach, w których odnośny moduł został zainstalowany.


Aby zidentyfikować systemy, w których został zainstalowany moduł wymagany w przypadku tego problemu, należy zebrać dane za pomocą kwerendy zawierającej następujący warunek:
select *  from  SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on 
SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID = SMS_R_System.ResourceId where 
SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = "Microsoft ASP.NET ValidatePath 
Module"

Przykładowe raporty

Do tej sekcji dołączono zestaw przykładowych raportów, które są przydatne w ocenie zgodności. Aby zaimplementować te raporty, należy skopiować następujący tekst i wkleić go do Notatnika, a następnie zapisać plik z rozszerzeniem mof. Można go zapisać na przykład jako Aspnet.mof.

UWAGA: Należy pamiętać o tym, że kod witryny w pierwszym wierszu pliku musi oznaczać główną witrynę, w której raporty zostaną zainstalowane. Jeśli na przykład instaluje się raporty w witrynie głównej programu SMS A01, pierwsza linia powinna mieć następującą postać:
#pragma namespace("\\\\.\\root\\sms\\site_A01") 

Po wygenerowaniu pliku należy go skompilować. W serwerze witryny głównej programu SMS, w której mają zostać zainstalowane raporty i w której znajduje się dostawca programu SMS, należy uruchomić kompilację, wpisując następujące polecenie w wierszu polecenia:
mofcomp.exe aspnet.mof


Przykładowe raporty są następujące:
#pragma namespace("\\\\.\\root\\sms\\site_PPP")

//////////////////////////////////////////////////////////////////////////////////////
// Tego raportu nie należy modyfikować. Jest on dostarczany z programem SMS
//////////////////////////////////////////////////////////////////////////////////////
instance of SMS_Report as $N108
{
	Category = "Dystrybucja oprogramowania - Stan anonsu";
	Comment = "Ten raport zawiera komunikaty o stanie dotyczące konkretnego komputera i anonsu.";
	DrillThroughColumns = {5};
	GraphXCol = 1;
	GraphYCol = 2;
	MachineDetail = FALSE;
	MachineSource = FALSE;
	Name = "Komunikaty o stanie anonsu dla konkretnego komputera i anonsu";
	NumPrompts = 2;
	RefreshInterval = 0;

	ReportParams = {
instance of SMS_ReportParameter
{
	AllowEmpty = FALSE;
	DefaultValue = "";
	PromptText = "Identyfikator anonsu";
	SampleValueSQL = "begin\r\n if (@__filterwildcard = '')\r\n  select AdvertisementID, AdvertisementName, 
        Comment from v_Advertisement order by AdvertisementName\r\n else\r\n  select AdvertisementID, AdvertisementName, 
        Comment from v_Advertisement\r\n  WHERE AdvertisementID like @__filterwildcard\r\n  order by AdvertisementName\r\nend";
	VariableName = "AdvertID";
}, 
instance of SMS_ReportParameter
{
	AllowEmpty = FALSE;
	DefaultValue = "";
	PromptText = "Nazwa komputera";
	SampleValueSQL = "begin\r\n if (@__filterwildcard = '')\r\n  SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS 
        WHERE SYS.Client0=1 ORDER By SYS.Netbios_Name0\r\n else\r\n  SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS 
        WHERE SYS.Client0=1\r\n  and SYS.Netbios_Name0 like @__filterwildcard\r\n  ORDER By SYS.Netbios_Name0\r\nend";
	VariableName = "Name";
}};

	SQLQuery = "/* status message detail, params=machine name, AdvertisementID */\r\n\r\nselect 
        DATEADD(ss,@__timezoneoffset,stat.Time) as Time,  info.MessageStateName, info.MessageName, stat.MessageID, 
        stat.RecordID\r\nfrom v_StatusMessage stat\r\njoin v_StatMsgAttributes att on stat.RecordID=att.RecordID and 
        stat.Time=att.AttributeTime\r\nleft join v_AdvertisementStatusInformation info on stat.MessageID=info.MessageID\r\nwhere stat.Component 
        in ('SMS System Offer Data Provider (ODP)', 'Available Programs Manager (APM)', 'Software Distribution','Device Client')\r\n   
        and stat.MachineName=@Name and att.AttributeID=401\r\n   and att.AttributeValue=@AdvertID\r\norder by stat.Time";
	StatusMessageDetailSource = TRUE;
};

//////////////////////////////////////////////////////////////////////////////////////
// Nowy raport anonsu skanowania programu ASP .NET 
//////////////////////////////////////////////////////////////////////////////////////
instance of SMS_Report as $N410
{
	Category = "Skanowanie programu ASP .NET - Stan anonsu";
	Comment = "Ten raport zawiera listę zasobów, które są w określonym stanie dla anonsu skanowania programu ASP .NET. 
        Można na przykład zobaczyć, na których zasobach został pomyślnie uruchomiony program skanowania programu ASP .NET 
        i czy są one zgodne czy nie.\r\n(Typ klienta: 0 = Starszy klient; 1 = Zaawansowany klient)";
	DrillThroughColumns = {9, 1};

	DrillThroughReportPath = $N108;
	GraphXCol = 1;
	GraphYCol = 2;
	MachineDetail = FALSE;
	MachineSource = FALSE;
	Name = "Wszystkie zasoby systemowe dla anonsu skanowania programu ASP .NET w określonym stanie";
	NumPrompts = 2;
	RefreshInterval = 0;

	ReportParams = {
instance of SMS_ReportParameter
{
	AllowEmpty = FALSE;
	DefaultValue = "";
	PromptText = "Stan dystrybucji oprogramowania";
	SampleValueSQL = "begin\r\n if (@__filterwildcard = '')\r\n  select distinct MessageStateName from v_AdvertisementStatusInformation 
        where MessageState <= 13 order by MessageStateName\r\n else\r\n  select distinct MessageStateName from v_AdvertisementStatusInformation 
        where MessageState <= 13\r\n  and MessageStateName like @__filterwildcard\r\n  order by MessageStateName\r\nend";
	VariableName = "StateName";
}, 
instance of SMS_ReportParameter
{
	AllowEmpty = FALSE;
	DefaultValue = "";
	PromptText = "Identyfikator anonsu";
	SampleValueSQL = "begin\r\n if (@__filterwildcard = '')\r\n  select AdvertisementID, AdvertisementName, Comment from v_Advertisement 
        order by AdvertisementName\r\n else\r\n  select AdvertisementID, AdvertisementName, Comment from v_Advertisement\r\n  
        WHERE AdvertisementID like @__filterwildcard\r\n  order by AdvertisementName\r\nend";
	VariableName = "AdvertID";
}};

	SQLQuery = "declare @State int\r\n\r\nselect @State=MessageState \r\nfrom v_AdvertisementStatusInformation\r\nwhere 
        MessageStateName=@StateName and MessageState < 100\r\n\r\nif @State in (0,1,2,3) /* no status, accepted, rejected, expired */\r\n  
        select sys.Netbios_Name0, sys.User_Domain0, sys.User_Name0, site.SMS_Installed_Sites0, Client_Type0, \r\n         
        LastAcceptanceMessageID, LastAcceptanceMessageIDName, \r\n         
        DATEADD(ss,@__timezoneoffset,LastAcceptanceStatusTime) as LastAcceptanceStatusTime,\r\n         
        AdvertisementID\r\n  from v_ClientAdvertisementStatus stat\r\n  
        join v_R_System sys on stat.ResourceID=sys.ResourceID\r\n  
        left join v_RA_System_SMSInstalledSites site on stat.ResourceID=site.ResourceID\r\n  
        where stat.LastAcceptanceState=@State and stat.AdvertisementID=@AdvertID\r\nelse if @StateName = 'Vulnerable' /* Vulnerable 
        */\r\nselect sys.Netbios_Name0, sys.User_Domain0, sys.User_Name0,site.SMS_Installed_Sites0, Client_Type0, \r\n       
        LastStatusMessageID, LastStatusMessageIDName, \r\n       
        DATEADD(ss,@__timezoneoffset,LastStatusTime) as LastStatusTime, \r\n       
        AdvertisementID, LastExecutionResult, LastExecutionContext\r\n  from v_ClientAdvertisementStatus stat\r\n  
        join v_R_System sys on stat.ResourceID=sys.ResourceID\r\n  left join v_RA_System_SMSInstalledSites site on stat.ResourceID=site.ResourceID\r\n  
        where stat.LastState=11 and stat.AdvertisementID=@AdvertID\r\n and ISNULL(stat.LastExecutionResult, 0)='20000'\r\n else if @State = 11 
        /* failed */\r\n  select sys.Netbios_Name0, sys.User_Domain0, sys.User_Name0,site.SMS_Installed_Sites0, Client_Type0, \r\n       
        LastStatusMessageID, LastStatusMessageIDName, \r\n       
        DATEADD(ss,@__timezoneoffset,LastStatusTime) as LastStatusTime, \r\n       
        AdvertisementID, LastExecutionResult, LastExecutionContext\r\n  
        from v_ClientAdvertisementStatus stat\r\n  
        join v_R_System sys on stat.ResourceID=sys.ResourceID\r\n  
        left join v_RA_System_SMSInstalledSites site on stat.ResourceID=site.ResourceID\r\n  
        where stat.LastState=@State and stat.AdvertisementID=@AdvertID\r\nand ISNULL(stat.LastExecutionResult, 0)!='20000'\r\nelse if @State 
        in (9,12,13) 
        /* running, reboot pending, suceeded */\r\n  
        select sys.Netbios_Name0, sys.User_Domain0, sys.User_Name0, site.SMS_Installed_Sites0, Client_Type0, \r\n       
        LastStatusMessageID, LastStatusMessageIDName,\r\n       
        DATEADD(ss,@__timezoneoffset,LastStatusTime) as LastStatusTime, \r\n       
        AdvertisementID, LastExecutionContext\r\n  from v_ClientAdvertisementStatus stat\r\n  join v_R_System sys on stat.ResourceID=sys.ResourceID\r\n  
        left join v_RA_System_SMSInstalledSites site on stat.ResourceID=site.ResourceID\r\n  
        where stat.LastState=@State and stat.AdvertisementID=@AdvertID\r\nelse\r\n  
        select sys.Netbios_Name0, sys.User_Domain0, sys.User_Name0, site.SMS_Installed_Sites0, Client_Type0, \r\n       
        CASE LastStatusMessageID WHEN 65535 THEN 10002 ELSE LastStatusMessageID END as LastStatusMessageID, \r\n       
        LastStatusMessageIDName,\r\n       
        DATEADD(ss,@__timezoneoffset,LastStatusTime) as LastStatusTime, \r\n       
        AdvertisementID\r\n  from v_ClientAdvertisementStatus stat\r\n  
        join v_R_System sys on stat.ResourceID=sys.ResourceID\r\n  left join v_RA_System_SMSInstalledSites site on stat.ResourceID=site.ResourceID\r\n  
        where stat.LastState=@State and stat.AdvertisementID=@AdvertID";
	StatusMessageDetailSource = FALSE;
	XColLabel = "";
	YColLabel = "";
};

//////////////////////////////////////////////////////////////////////////////////////
// Nowy raport dla anonsu skanowania programu ASP .NET
//////////////////////////////////////////////////////////////////////////////////////
instance of SMS_Report as $N411
{
	Category = "Skanowanie programu ASP .NET - Stan anonsu";
	Comment = "Ten raport zawiera podsumowanie stanu wszystkich zasobów, które były obiektami docelowymi anonsu skanowania programu ASP.NET. 
        Podsumowanie dzieli się na dwie części. W stanie akceptacji podsumowano, ile zasobów odebrało anons, odrzuciło go lub nie odebrało. 
        W stanie dostarczenia podsumowano zasoby, na których uruchomiono lub próbowano uruchomić program skanowania i które są zagrożone.";
	DrillThroughColumns = {1, 4};
	
	
	DrillThroughReportPath = $N410;
	GraphXCol = 1;
	GraphYCol = 2;
	MachineDetail = FALSE;
	MachineSource = FALSE;
	Name = "Stan skanowania programu ASP .NET określonego anonsu";
	NumPrompts = 1;
	RefreshInterval = 0;
	
	ReportParams = {
instance of SMS_ReportParameter
{
	AllowEmpty = FALSE;
	DefaultValue = "";
	PromptText = "Identyfikator anonsu";
	SampleValueSQL = "begin \n if (@__filterwildcard = '') \n  select AdvertisementID, AdvertisementName, Comment from v_Advertisement 
        order by AdvertisementName \n else \n  select AdvertisementID, AdvertisementName, Comment from v_Advertisement \n  WHERE AdvertisementID 
        like @__filterwildcard \n  order by AdvertisementName \nend";
	VariableName = "AdvertID";
}};
	SecurityKey = "";
	SQLQuery = "declare @Total int \ndeclare @Accepted int \n \nselect @Total=count(*), @Accepted=sum(case LastState when 0 then 0 else 1 end) 
        \nfrom v_ClientAdvertisementStatus  \nwhere AdvertisementID=@AdvertID \n \nselect LastAcceptanceStateName as C013, count(*) as C015,  \n      
        ROUND(100.0*count(*)/@Total,1) as C016, \nAdvertisementID \nfrom v_ClientAdvertisementStatus  \nwhere AdvertisementID=@AdvertID \ngroup by                    
        LastAcceptanceStateName, AdvertisementID \n \nselect LastStateName as C017, count(*) as C015,  \n       ROUND(100.0*count(*)/@Accepted,1)  
        as C016, 
        \nAdvertisementID \nfrom v_ClientAdvertisementStatus  \nwhere AdvertisementID=@AdvertID and (LastState not in (0, 11) OR  \n(LastState = 11 and         
        ISNULL(LastExecutionResult, 0) != '20000'))  \ngroup by LastStateName, AdvertisementID UNION  \n select 'Vulnerable' as C017, count(*) as C015,  
        \n   ROUND(100.0*count(*)/@Accepted,1)  as C016, AdvertisementID  \nfrom v_ClientAdvertisementStatus  \nwhere AdvertisementID=@AdvertID and  
        \n(LastState = 11 and ISNULL(LastExecutionResult, 0) = '20000')  \ngroup by AdvertisementID";
 	StatusMessageDetailSource = FALSE;
};

Materiały referencyjne

887289 Moduł protokołu HTTP wyszukuje problemy z zamianą na postać kanoniczną w środowisku ASP.NET
887405 Jak używać Instalatora Windows i przystawki Zasady grupy do rozmieszczania pliku VPModule.msi w domenie usługi Active Directory
887459 Jak programowo testować problemy związane z kanonizacją, występujące w programie ASP.NET
887290 Jak korzystać ze skanera modułu ValidatePath do programu ASP.NET (VPModuleScanner.js)
887787 You may receive error messages from Reporting Services after you install the ASP.NET ValidatePath Module

Właściwości

Numer ID artykułu: 887404 - Ostatnia weryfikacja: 9 listopada 2004 - Weryfikacja: 2.3
Informacje zawarte w tym artykule dotyczą:
  • Microsoft ASP.NET 1.1
  • Microsoft Systems Management Server 2003 Enterprise Edition
Słowa kluczowe: 
kbhowto kbsecurity kbsmsdeploy KB887404

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com