Microsoft KB Archive/195957

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

Article ID: 195957

Article Last Modified on 3/16/2005

-

APPLIES TO


 * Microsoft Active Server Pages 4.0
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition
 * Microsoft Visual Basic 5.0 Learning Edition
 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Internet Information Server 3.0
 * Microsoft Internet Information Server 4.0
 * Microsoft Internet Information Services 5.0

-



This article was previously published under Q195957



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_ ). 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.



Step-by-Step Procedures
 From the Start menu, click Run, and enter the following in the Open text box:

dcomcnfg

 In the Distributed COM Configuration Properties dialog box, click the Applications tab. Select the object from the list and double-click on it. In the Properties dialog box that appears, click the Identity tab. Note that the default setting is the Launching User. Change this setting to a specific Windows NT user account of your choice by selecting This User and entering the user name and password. Click OK, and then click OK again.</li> Run the Active Server Pages page.</li></ol>

<div class="status_section">

STATUS
This behavior is by design.

<div class="moreinformation_section">

Steps to Reproduce Behavior
<ol>  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

</li>  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

</li>  Create an Active Server Pages page with the following code:

<%        Set objTest = Server.CreateObject("TwoInstances.TestObject") objTest.AnyMethod Set objTest = Nothing %>

</li> Start the Task Manager, and click the Processes tab.</li> Run the Visual Basic Standard .exe. Note the running instance of the .exe in the Task Manager.</li> Run the Active Server Pages page.</li></ol>

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

Keywords: kbinetdev kbcodesnippet kbprb KB195957

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.