Thursday, January 27, 2011

Win XP error 0x80041003 using GetObject/winmgmts

My computer is called "neil" and I want to set some values using WMI in vbScript. I adapetd the script below from one supplied by Microsoft. When I run it in my browser I get

Error Type: (0x80041003) /dressage/30/pdf2.asp, line 8

I suspect it is some registry/security setting.

Any advice?

John Lewis

FULL SCRIPT

call Print_HTML_Page("http://neil/dressage/ascii.asp", "ascii")

Sub SetPDFFile(strPDFFile)
    Const HKEY_LOCAL_MACHINE = &H80000002
    strKeyPath = "SOFTWARE\Dane Prairie Systems\Win2PDF"
    strComputer = "."
    Set objReg=GetObject( _
        "winmgmts:{impersonationLevel=impersonate}!\\" & _ 
        strComputer & "\root\default:StdRegProv")
    strValueName = "PDFFileName"
    objReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,_
        strKeyPath,strValueName,strPDFFile
End Sub

Sub Print_HTML_Page(strPathToPage, strPDFFile)
      SetPDFFile( strPDFFile )
      Set objIE = CreateObject("InternetExplorer.Application")
      'From http://www.tek-tips.com/viewthread.cfm?qid=1092473&page=5
      On Error Resume Next
      strPrintStatus = objIE.QueryStatusWB(6)
      If Err.Number  0 Then
            MsgBox "Cannot find a printer. Operation aborted."
            objIE.Quit
            Set objIE = Nothing
            Exit Sub
      End If

      With objIE
      .visible=0
      .left=200
      .top=200
      .height=400
      .width=400
      .menubar=0
      .toolbar=1
      .statusBar=0
      .navigate strPathToPage
      End With

      'Wait until IE has finished loading
      Do while objIE.busy
            WScript.Sleep 100
      Loop

      On Error Goto 0
      objIE.ExecWB 6,2
      'Wait until IE has finished printing
      WScript.Sleep 2000
      objIE.Quit

      Set objIE = Nothing
End Sub
  • There's a posting on PC Review entitled WMI damaged/error 0x80041003

    One of the answers suggests this Microsoft support post which while it concerns Vista does has this listed as the cause of the problem:

    This problem occurs if the WMI filter is accessed without sufficient permission.

    So check your permissions and check the solution offered by Microsoft.

    From ChrisF
  • First, you need to be running this script under an account that has admin rights on each computer. That could well cause your WMI Provider issue. This is what I think your issue is.

    Are you trying to run this as part of an asp webpage, or as a standalone script. Your deployment details would be helpful.

    Finally, so you realize that you're setting strComputer to the local machine that this is running on? Depending on how this is being deployed, it may not do anything.

    Also, it looks like you're passing a file name of "ascii". That doesn't look right given that you're trying to set the name of a PDF file.

    Finally, in VBScript, the line breaks matter. This is how it should look:

    call Print_HTML_Page("http://neil/dressage/ascii.asp", "ascii")
    
    Sub SetPDFFile(strPDFFile)
        Const HKEY_LOCAL_MACHINE = &H80000002
        strKeyPath = "SOFTWARE\Dane Prairie Systems\Win2PDF"
        strComputer = "."
        Set objReg=GetObject( _ "winmgmts:{impersonationLevel=impersonate}!\" & _
            strComputer & "\root\default:StdRegProv") 
    
        strValueName = "PDFFileName"
        objReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,_
            strKeyPath,strValueName,strPDFFile
    End Sub
    
    Sub Print_HTML_Page(strPathToPage, strPDFFile) 
        SetPDFFile( strPDFFile ) 
        Set objIE = CreateObject("InternetExplorer.Application") 'From http://www.tek-tips.com/viewthread.cfm?qid=1092473&page=5 On Error Resume Next strPrintStatus = objIE.QueryStatusWB(6) If Err.Number <> 0 Then MsgBox "Cannot find a printer. Operation aborted." objIE.Quit Set objIE = Nothing Exit Sub End If
    
        With objIE
        .visible=0
        .left=200
        .top=200
        .height=400
        .width=400
        .menubar=0
        .toolbar=1
        .statusBar=0
        .navigate strPathToPage
        End With
    
        'Wait until IE has finished loading
        Do while objIE.busy
            WScript.Sleep 100
        Loop
    
        On Error Goto 0
        objIE.ExecWB 6,2
        'Wait until IE has finished printing
        WScript.Sleep 2000
        objIE.Quit
    
        Set objIE = Nothing
    
    End Sub
    
    From gWaldo
  • Thanks for your reply. The line breaks seem to have been introduced in the process of paasting into this form.

    Well spotted - I was using a PDF file name "ascii". I added a .pdf extension but still get the error. I suspect you're right that it's to do with admin rights. Here's more about the setup and what I'm trying to achieve.

    Win2pdf is a product for writing PDFs by works by simulating a Windows printer. You "print" the page, select win2pdf in the print dialog and it then asks for a file name. I have it installed on my pc (called Neil) and it works fine in this conventional way.

    My aim is to write an html page to a PDF file using win2pdf - but via ASP/vbscript/javascript rather than with manual intervention. The script for doing this was provided by win2PDF's tech support but when it did not work, that was the limit of their understanding.

    In the sample script the file ascii.asp just produces a table of ascii codes/characters. The URL given is on my own PC which has IIS set up to run scripts which it does fine. The error I get occurs on about the fourth line executed.

    I am logged in with full admin rights - I think! But I'm no expert. I hope this helps to give some more specific suggestions about how to check/fix the admin rights.

    From John Lewis

0 comments:

Post a Comment