2010-10-15 21 views
0

On m'a donné un HTA que je pense que a été créé par le HTA_Helpomatic. Ils veulent le convertir en une page ASP classique. J'ai donc fait quelques changements de base, et je pense que j'ai presque réussi. Mais je rencontre un problème - le bit 'VBScript Object Required'. Il le fait sur la ligne Set objlst_groupnames = document.getElementById ("list_servicenames") Voici le script HTA d'origine - quelqu'un peut-il m'aider à comprendre comment le convertir correctement en ASP? J'ai créé une page similaire, mais cela n'a pas fonctionné comme ils le souhaitaient (vous avez dû cliquer sur chaque service pour le basculer, ou simplement cliquer sur une case à cocher). Merci.Conversion d'un HTA en une page ASP?

<head> 
<title>Start/Stop/Restart Windows Services</title> 
<HTA:APPLICATION 
APPLICATIONNAME="Start/Stop/Restart Windows Services" 
BORDER="thin" 
SCROLL="yes" 
SINGLEINSTANCE="yes" 
ID="oHTA" 
> 
<APPLICATION:HTA> 
</head> 

<script language="VBScript"> 

Sub Window_OnLoad 

Set objlst_groupnames = document.getElementById("list_servicenames") 
If objlst_groupnames Is Nothing Then 
MsgBox "A problem was encountered while creating the listview." & vbCRLF & "Please see your administrator." 
Else 
    With objlst_groupnames 
     .View    = 3 
     .Width    = 800 
     .Height   = 600 
     .SortKey   = 0 
     .Arrange   = 0 
     .LabelEdit   = 1 
     .SortOrder   = 0 
     .Sorted   = 1 
     .MultiSelect  = 0 
     .LabelWrap   = -1 
     .HideSelection  = -1 
     .HideColumnHeaders = 0 
     .OLEDragMode  = 0 
     .OLEDropMode  = 0 
     .Checkboxes  = 1 
     .FlatScrollBar  = 0 
     .FullRowSelect  = 1 
     .GridLines   = 0 
     .HotTracking  = 0 
     .HoverSelection = 0 
     .PictureAlignment = 0 
     .TextBackground = 0 
     .ForeColor   = -2147483640 
     .BackColor   = -2147483643 
     .BorderStyle  = 1 
     .Appearance  = 1 
     .MousePointer  = 0 
     .Enabled   = 1 
     .ColumnHeaders.Clear 
     .ColumnHeaders.Add , , "Caption", 150 
     .ColumnHeaders.Add , , "State", 150 
     .ColumnHeaders.Add , , "Name", 150 
     .ColumnHeaders.Add , , "Description", 150 
     .ColumnHeaders.Add , , "Start Mode", 150 
     .ListItems.Clear 
    End With 
End If 
sComputer = MachineName.Value 

ListServices(sComputer) 
End Sub 

Sub ListServices(sComputer) 
ON ERROR RESUME NEXT 
sServiceName = ServiceName.Value 
Set objList = document.getElementById("list_servicenames") 
objList.ListItems.Clear 

set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2") 

if sServiceName = "" then 
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Service") 
else 
    Set colItems = objWMIService.ExecQuery("Select * From Win32_Service where DisplayName like '%" & sServiceName & "%'") 
end if 

For Each objItem in colItems 
    Set objListItem = objList.ListItems.Add 
    objListItem.Text = objItem.Caption 
    objListItem.ListSubItems.Add.Text = objItem.State 
    objListItem.ListSubItems.Add.Text = objItem.Name 
    objListItem.ListSubItems.Add.Text = objItem.Description 
    objListItem.ListSubItems.Add.Text = objItem.StartMode 
Next 
End Sub 

Sub btn_start_onClick() 
sComputer = MachineName.Value 
for n = 1 to list_servicenames.ListItems.Count 
    if list_servicenames.ListItems(n).checked = True then 
     strService = list_servicenames.ListItems(n).ListSubItems(2).Text 
     Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2") 
     Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'") 
     For each objService in colServiceList 
      errReturn = objService.StartService() 
     Next 
    end if 
next 
ListServices(sComputer) 
End Sub 

Sub btn_stop_onClick() 
sComputer = MachineName.Value 
for n = 1 to list_servicenames.ListItems.Count 
    if list_servicenames.ListItems(n).checked = True then 
     strService = list_servicenames.ListItems(n).ListSubItems(2).Text 
     Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2") 
     Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'") 
     For each objService in colServiceList 
      errReturn = objService.StopService() 
     Next 
    end if 
next 
ListServices(sComputer) 
End Sub 

Sub btn_restart_onClick() 
sComputer = MachineName.Value 
'Stop services 
for n = 1 to list_servicenames.ListItems.Count 
    if list_servicenames.ListItems(n).checked = True then 
     strService = list_servicenames.ListItems(n).ListSubItems(2).Text 
     Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2") 
     Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'") 
     For each objService in colServiceList 
      errReturn = objService.StopService() 
     Next 
    end if 
next 
'Start services 
for n = 1 to list_servicenames.ListItems.Count 
    if list_servicenames.ListItems(n).checked = True then 
     strService = list_servicenames.ListItems(n).ListSubItems(2).Text 
     Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2") 
     Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'") 
     For each objService in colServiceList 
      errReturn = objService.StartService() 
     Next 
    end if 
next 
ListServices(sComputer) 
End Sub 

Sub btn_Refresh_onClick() 
sComputer = MachineName.Value 
ListServices(sComputer) 
End Sub 

Sub btn_exit_onClick() 
Window.Close 
End Sub 

function list_servicenames_ColumnClick(colheader) 
list_servicenames.SortKey = colheader.index-1 
end Function 

</script> 

<body> 

Enter Machine Name: <Input Type = "Text" Name = "MachineName"> 
<Input Type = "Button" Value = "Get Services" Name = "Run_Button" onClick = "Window_OnLoad"> Filter Services by Name: <Input Type = "Text" Name = "ServiceName"><P> 
<input type="button" value="Refresh" name="btn_Refresh" id="btn_Refresh" title="Click to refresh the services list"> &nbsp; 
<input type="button" value="Start" name="btn_start" id="btn_start" title="Click to Start the Services"> &nbsp; 
<input type="button" value="Stop" name="btn_stop" id="btn_stop" title="Click to Stop the Service"> &nbsp; 
<input type="button" value="Restart" name="btn_restart" id="btn_restart" title="Click to Restart the Services"> &nbsp; 
<input type="button" value="Exit" name="btn_exit" id="btn_exit" title="Click to Exit Form "> 
<br/> 
<OBJECT id="list_servicenames" name="list_servicenames" classid="clsid:BDD1F04B-858B-11D1-B16A-00C0F0283628"></OBJECT> 
</body> 
+0

"Ils" veulent que cela fonctionne à partir de ASP au lieu de HTA pourquoi ??? – AnthonyWJones

+0

Ainsi, ils peuvent laisser le service d'assistance y avoir accès pour une variété de serveurs qu'ils utilisent et être en mesure d'utiliser un utilisateur administratif pour l'exécuter afin qu'ils n'aient pas besoin d'être administrateurs. Bien sûr, je dois changer de la méthode moniker au connectserver, mais c'est faisable pour moi lol. – user786159

Répondre

0

Pour obtenir un événement de clic côté client afin d'activer quelque chose sur le serveur, vous devez utiliser quelque chose comme AJAX.