PRB: Instantiating Object in .exe Starts Another .exe Instance
ID: Q195957
|
The information in this article applies to:
-
Active Server Pages
-
Microsoft Visual C++, 32-bit Editions, versions 5.0, 6.0
-
Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, versions 5.0, 6.0
-
Microsoft Internet Information Server versions 3.0, 4.0
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
- 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.
- Run the Active Server Pages page.
STATUS
This behavior is by design.
MORE INFORMATION
Steps to Reproduce Behavior
- 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
- 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
- Create an Active Server Pages page with the following code:
<%
Set objTest = Server.CreateObject("TwoInstances.TestObject")
objTest.AnyMethod
Set objTest = Nothing
%>
- Start the Task Manager, and click the Processes tab.
- Run the Visual Basic Standard .exe. Note the running instance of the
.exe in the Task Manager.
- 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