PRB: Instantiating Object in .exe Starts Another .exe Instance

ID: Q195957


The information in this article applies to:


SYMPTOMS

When you instantiate a COM component in an out-of-process server (.exe) from Active Server Pages (ASP), another instance of the .exe starts.


CAUSE

The default Identity of a COM component in an .exe is the Launching User. The implication of this is that when the Active Server Pages page tries to create an instance of this object, it is doing so in the security context of the anonymous user (IUSR_<machine name>). If this is a different user from the user that started the instance of the .exe that is currently running, another instance of the .exe starts.


RESOLUTION

Step-by-Step Procedures

  1. From the Start menu, click Run, and enter the following in the Open text box:
    dcomcnfg


  2. In the Distributed COM Configuration Properties dialog box, click the Applications tab.


  3. Select the object from the list and double-click on it.


  4. In the Properties dialog box that appears, click the Identity tab. Note that the default setting is the Launching User.


  5. Change this setting to a specific Windows NT user account of your choice by selecting This User and entering the user name and password.


  6. Click OK, and then click OK again.


  7. Run the Active Server Pages page.



STATUS

This behavior is by design.


MORE INFORMATION

Steps to Reproduce Behavior

  1. Create a Visual Basic ActiveX .exe named TwoInstances, add a class module named TestObject and implement the following method:
    
          Public Sub AnyMethod
            'Do Anything
          End Sub
     


  2. Create a Visual Basic Standard .exe, include a reference to TwoInstances.TestObject, add a command button (Command1) to the default form, and type the following in the Click event of the command button:
    
          Private Sub Command1_Click()
            Dim objTest As TwoInstances.TestObject
    
            Set objTest = New TwoInstances.TestObject
            objTest.AnyMethod
            Set objTest = Nothing
    
          End Sub
     


  3. Create an Active Server Pages page with the following code:
    
          <%
             Set objTest = Server.CreateObject("TwoInstances.TestObject")
             objTest.AnyMethod
             Set objTest = Nothing
          %>
     


  4. Start the Task Manager, and click the Processes tab.


  5. Run the Visual Basic Standard .exe. Note the running instance of the .exe in the Task Manager.


  6. Run the Active Server Pages page.


RESULT: Another instance of the .exe appears in the Task Manager.


Keywords          : kbcode kbASP kbCOMt kbVBp500 kbVBp600 kbVC500 kbVC600 kbGrpASP kbInetDev 
Version           : WINDOWS:5.0,6.0; WINNT:3.0,4.0,5.0,6.0;
Platform          : 
Issue type        : kbprb 

Last Reviewed: May 25, 1999