<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="VB6Parse Library Reference - getautoserversettings - Environment">
<title>getautoserversettings - Environment - VB6Parse Library Reference</title>
<link rel="stylesheet" href="../../../assets/css/style.css">
<link rel="stylesheet" href="../../../assets/css/docs-style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css">
<script src="../../../assets/js/theme-switcher.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/vbnet.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body>
<header class="docs-header">
<div class="container">
<h1><a href="../../../index.html">VB6Parse</a> / <a href="../../../library/index.html">Library</a> / <a href="../../../library/functions/environment/index.html">Environment</a> / getautoserversettings</h1>
<p class="tagline">VB6 Library Reference</p>
</div>
</header>
<nav class="docs-nav">
<div class="container">
<a href="../../../index.html">Home</a>
<a href="../../../library/index.html">Library Reference</a>
<a href="../../../documentation.html">Documentation</a>
<a href="https://docs.rs/vb6parse" target="_blank">API Docs</a>
<a href="https://github.com/scriptandcompile/vb6parse" target="_blank">GitHub</a>
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme">
<span class="theme-icon">🌙</span>
</button>
</div>
</nav>
<main class="container">
<article class="library-item">
<p>GetAutoServerSettings Function
Returns information about the security settings for a <code>DCOM</code> (<code>Distributed Component Object Model</code>) server.</p>
<h1 id="syntax">Syntax</h1>
<pre><code class="language-vbnet">GetAutoServerSettings(progid, clsid, machine)</code></pre>
<h1 id="parameters">Parameters</h1>
<ul>
<li><code>progid</code> - Required. String expression that specifies the programmatic identifier (<code>ProgID</code>) of the server.</li>
<li><code>clsid</code> - Required. String expression that specifies the class identifier (<code>CLSID</code>) of the server.</li>
<li><code>machine</code> - Required. String expression that specifies the name of the machine where the server is located.</li>
</ul>
<h1 id="return-value">Return Value</h1>
<p>Returns a <code>Long</code> value containing security settings information for the specified <code>DCOM</code> server.</p>
<h1 id="remarks">Remarks</h1>
<ul>
<li>This function is specific to <code>DCOM</code> (<code>Distributed Component Object Model</code>) automation servers.</li>
<li>Used primarily in distributed computing scenarios.</li>
<li>Returns security configuration information from the Windows registry.</li>
<li>The function is part of VB6's <code>DCOM</code> support infrastructure.</li>
<li>Typically used in enterprise applications with distributed components.</li>
<li>Requires appropriate <code>DCOM</code> permissions on the target machine.</li>
<li>The progid and clsid must correspond to a registered <code>COM</code>/<code>DCOM</code> server.</li>
<li>Machine name can be a <code>NetBIOS</code> name, <code>DNS</code> name, or <code>IP</code> address.</li>
<li>Returns 0 if the server settings cannot be retrieved.</li>
</ul>
<h1 id="typical-uses">Typical Uses</h1>
<ul>
<li>Querying DCOM server security configurations</li>
<li>Validating remote server accessibility</li>
<li>Auditing distributed component settings</li>
<li>Troubleshooting DCOM connection issues</li>
<li>Enterprise application deployment verification</li>
<li>Remote component diagnostics</li>
</ul>
<h1 id="basic-usage-examples">Basic Usage Examples</h1>
<pre><code class="language-vbnet">' Check DCOM server settings
Dim settings As Long
settings = GetAutoServerSettings("MyServer.Application", _
"{12345678-1234-1234-1234-123456789012}", _
"SERVER01")
If settings <> 0 Then
Debug.Print "Server settings retrieved: " & settings
Else
Debug.Print "Unable to retrieve server settings"
End If
' Verify remote component availability
Dim result As Long
result = GetAutoServerSettings("Excel.Application", _
"{00024500-0000-0000-C000-000000000046}", _
"REMOTE-PC")
If result <> 0 Then
MsgBox "Remote Excel server is configured"
End If
' Query local server settings
Dim localSettings As Long
localSettings = GetAutoServerSettings("MyApp.Server", _
"{ABCDEF01-2345-6789-ABCD-EF0123456789}", _
".")</code></pre>
<h1 id="common-patterns">Common Patterns</h1>
<h2 id="1-dcom-server-validation">1. DCOM Server Validation</h2>
<pre><code class="language-vbnet">Function ValidateDCOMServer(progID As String, _
clsID As String, _
serverName As String) As Boolean
Dim settings As Long
On Error GoTo ErrorHandler
settings = GetAutoServerSettings(progID, clsID, serverName)
If settings <> 0 Then
Debug.Print "DCOM server validated on " & serverName
ValidateDCOMServer = True
Else
Debug.Print "DCOM server not accessible on " & serverName
ValidateDCOMServer = False
End If
Exit Function
ErrorHandler:
Debug.Print "Error validating DCOM server: " & Err.Description
ValidateDCOMServer = False
End Function</code></pre>
<h2 id="2-multi-server-configuration-check">2. Multi-Server Configuration Check</h2>
<pre><code class="language-vbnet">Sub CheckServersConfiguration()
Dim servers() As String
Dim i As Long
Dim settings As Long
servers = Array("SERVER01", "SERVER02", "SERVER03")
For i = LBound(servers) To UBound(servers)
settings = GetAutoServerSettings("MyApp.DataServer", _
"{11111111-2222-3333-4444-555555555555}", _
servers(i))
If settings <> 0 Then
Debug.Print servers(i) & " - Configured: " & settings
Else
Debug.Print servers(i) & " - Not configured"
End If
Next i
End Sub</code></pre>
<h2 id="3-server-discovery-and-verification">3. Server Discovery and Verification</h2>
<pre><code class="language-vbnet">Function FindAvailableServer(progID As String, _
clsID As String, _
servers As Collection) As String
Dim server As Variant
Dim settings As Long
For Each server In servers
On Error Resume Next
settings = GetAutoServerSettings(progID, clsID, CStr(server))
On Error GoTo 0
If settings <> 0 Then
FindAvailableServer = CStr(server)
Exit Function
End If
Next server
FindAvailableServer = ""
End Function
' Usage
Dim servers As New Collection
servers.Add "PRIMARY-SERVER"
servers.Add "BACKUP-SERVER"
servers.Add "FAILOVER-SERVER"
Dim activeServer As String
activeServer = FindAvailableServer("MyApp.Service", _
"{FEDCBA98-7654-3210-FEDC-BA9876543210}", _
servers)
If activeServer <> "" Then
Debug.Print "Using server: " & activeServer
End If</code></pre>
<h2 id="4-settings-comparison-across-servers">4. Settings Comparison Across Servers</h2>
<pre><code class="language-vbnet">Sub CompareServerSettings(progID As String, _
clsID As String, _
server1 As String, _
server2 As String)
Dim settings1 As Long
Dim settings2 As Long
settings1 = GetAutoServerSettings(progID, clsID, server1)
settings2 = GetAutoServerSettings(progID, clsID, server2)
Debug.Print "Server: " & server1 & " - Settings: " & settings1
Debug.Print "Server: " & server2 & " - Settings: " & settings2
If settings1 = settings2 Then
Debug.Print "Servers have identical settings"
Else
Debug.Print "Warning: Server settings differ"
End If
End Sub</code></pre>
<h2 id="5-dynamic-server-connection">5. Dynamic Server Connection</h2>
<pre><code class="language-vbnet">Function ConnectToServer(progID As String, _
clsID As String, _
preferredServer As String, _
fallbackServer As String) As Object
Dim settings As Long
Dim targetServer As String
' Try preferred server first
settings = GetAutoServerSettings(progID, clsID, preferredServer)
If settings <> 0 Then
targetServer = preferredServer
Else
' Fall back to alternate server
settings = GetAutoServerSettings(progID, clsID, fallbackServer)
If settings <> 0 Then
targetServer = fallbackServer
Else
Err.Raise vbObjectError + 1000, , "No available servers"
End If
End If
Debug.Print "Connecting to: " & targetServer
Set ConnectToServer = CreateObject(progID, targetServer)
End Function</code></pre>
<h2 id="6-server-health-monitoring">6. Server Health Monitoring</h2>
<pre><code class="language-vbnet">Type ServerStatus
ServerName As String
Settings As Long
LastChecked As Date
IsAvailable As Boolean
End Type
Function CheckServerHealth(progID As String, _
clsID As String, _
serverName As String) As ServerStatus
Dim status As ServerStatus
status.ServerName = serverName
status.LastChecked = Now
On Error Resume Next
status.Settings = GetAutoServerSettings(progID, clsID, serverName)
On Error GoTo 0
status.IsAvailable = (status.Settings <> 0)
CheckServerHealth = status
End Function
Sub MonitorServers()
Dim servers() As String
Dim i As Long
Dim status As ServerStatus
servers = Array("SERVER-A", "SERVER-B", "SERVER-C")
For i = LBound(servers) To UBound(servers)
status = CheckServerHealth("MyApp.Service", _
"{12345678-ABCD-EFGH-IJKL-123456789ABC}", _
servers(i))
Debug.Print status.ServerName & ": " & _
IIf(status.IsAvailable, "Online", "Offline") & _
" (" & status.Settings & ")"
Next i
End Sub</code></pre>
<h2 id="7-configuration-auditing">7. Configuration Auditing</h2>
<pre><code class="language-vbnet">Sub AuditDCOMConfiguration(progID As String, clsID As String)
Dim servers() As String
Dim i As Long
Dim settings As Long
Dim fileNum As Integer
servers = Array("PROD-01", "PROD-02", "TEST-01", "DEV-01")
fileNum = FreeFile
Open "C:\Audit\DCOM_Audit.txt" For Output As #fileNum
Print #fileNum, "DCOM Configuration Audit Report"
Print #fileNum, "Date: " & Now
Print #fileNum, "ProgID: " & progID
Print #fileNum, "CLSID: " & clsID
Print #fileNum, String(50, "=")
For i = LBound(servers) To UBound(servers)
settings = GetAutoServerSettings(progID, clsID, servers(i))
Print #fileNum, "Server: " & servers(i)
Print #fileNum, " Settings Value: " & settings
Print #fileNum, " Status: " & IIf(settings <> 0, "Available", "Unavailable")
Print #fileNum, ""
Next i
Close #fileNum
Debug.Print "Audit complete"
End Sub</code></pre>
<h2 id="8-load-balancing-server-selection">8. Load Balancing Server Selection</h2>
<pre><code class="language-vbnet">Function SelectLeastLoadedServer(progID As String, _
clsID As String, _
servers As Collection) As String
Dim server As Variant
Dim settings As Long
Dim minSettings As Long
Dim selectedServer As String
minSettings = 2147483647 ' Max Long value
For Each server In servers
On Error Resume Next
settings = GetAutoServerSettings(progID, clsID, CStr(server))
On Error GoTo 0
If settings <> 0 And settings < minSettings Then
minSettings = settings
selectedServer = CStr(server)
End If
Next server
SelectLeastLoadedServer = selectedServer
End Function</code></pre>
<h2 id="9-deployment-verification">9. Deployment Verification</h2>
<pre><code class="language-vbnet">Function VerifyDeployment(progID As String, _
clsID As String, _
targetServers As Variant) As Boolean
Dim i As Long
Dim settings As Long
Dim allConfigured As Boolean
allConfigured = True
For i = LBound(targetServers) To UBound(targetServers)
settings = GetAutoServerSettings(progID, clsID, targetServers(i))
If settings = 0 Then
Debug.Print "Deployment failed on: " & targetServers(i)
allConfigured = False
Else
Debug.Print "Deployment verified on: " & targetServers(i)
End If
Next i
VerifyDeployment = allConfigured
End Function
' Usage in deployment script
Sub DeploymentCheck()
Dim productionServers As Variant
productionServers = Array("WEB-01", "WEB-02", "APP-01", "APP-02")
If VerifyDeployment("MyApp.BusinessLogic", _
"{AAAABBBB-CCCC-DDDD-EEEE-FFFF00001111}", _
productionServers) Then
MsgBox "Deployment successful on all servers"
Else
MsgBox "Deployment incomplete - check logs"
End If
End Sub</code></pre>
<h2 id="10-regional-server-discovery">10. Regional Server Discovery</h2>
<pre><code class="language-vbnet">Type RegionalServer
Region As String
ServerName As String
Settings As Long
End Type
Function GetRegionalServer(progID As String, _
clsID As String, _
region As String) As String
Dim regionalServers(1 To 3) As RegionalServer
Dim i As Long
' Define regional servers
regionalServers(1).Region = "US-EAST"
regionalServers(1).ServerName = "US-EAST-SVR01"
regionalServers(2).Region = "US-WEST"
regionalServers(2).ServerName = "US-WEST-SVR01"
regionalServers(3).Region = "EUROPE"
regionalServers(3).ServerName = "EU-SVR01"
' Check settings for each regional server
For i = 1 To 3
regionalServers(i).Settings = GetAutoServerSettings(progID, _
clsID, _
regionalServers(i).ServerName)
Next i
' Find matching region
For i = 1 To 3
If regionalServers(i).Region = region And regionalServers(i).Settings <> 0 Then
GetRegionalServer = regionalServers(i).ServerName
Exit Function
End If
Next i
GetRegionalServer = ""
End Function</code></pre>
<h1 id="advanced-usage">Advanced Usage</h1>
<h2 id="1-dcom-server-manager-class">1. DCOM Server Manager Class</h2>
<pre><code class="language-vbnet">' Class: DCOMServerManager
Private m_ProgID As String
Private m_CLSID As String
Private m_Servers As Collection
Private m_CurrentServer As String
Public Sub Initialize(progID As String, clsID As String)
m_ProgID = progID
m_CLSID = clsID
Set m_Servers = New Collection
End Sub
Public Sub AddServer(serverName As String)
m_Servers.Add serverName
End Sub
Public Function FindActiveServer() As String
Dim server As Variant
Dim settings As Long
For Each server In m_Servers
On Error Resume Next
settings = GetAutoServerSettings(m_ProgID, m_CLSID, CStr(server))
On Error GoTo 0
If settings <> 0 Then
m_CurrentServer = CStr(server)
FindActiveServer = m_CurrentServer
Exit Function
End If
Next server
FindActiveServer = ""
End Function
Public Function GetServerSettings(serverName As String) As Long
GetServerSettings = GetAutoServerSettings(m_ProgID, m_CLSID, serverName)
End Function
Public Function ValidateAllServers() As Collection
Dim results As New Collection
Dim server As Variant
Dim settings As Long
Dim result As String
For Each server In m_Servers
settings = GetAutoServerSettings(m_ProgID, m_CLSID, CStr(server))
result = CStr(server) & ":" & CStr(settings)
results.Add result
Next server
Set ValidateAllServers = results
End Function</code></pre>
<h2 id="2-failover-connection-handler">2. Failover Connection Handler</h2>
<pre><code class="language-vbnet">Type FailoverConfig
PrimaryServer As String
SecondaryServer As String
TertiaryServer As String
RetryCount As Integer
RetryDelay As Long
End Type
Function ConnectWithFailover(progID As String, _
clsID As String, _
config As FailoverConfig) As Object
Dim servers(1 To 3) As String
Dim i As Integer
Dim attempt As Integer
Dim settings As Long
servers(1) = config.PrimaryServer
servers(2) = config.SecondaryServer
servers(3) = config.TertiaryServer
For i = 1 To 3
For attempt = 1 To config.RetryCount
On Error Resume Next
settings = GetAutoServerSettings(progID, clsID, servers(i))
On Error GoTo 0
If settings <> 0 Then
Debug.Print "Connected to: " & servers(i)
Set ConnectWithFailover = CreateObject(progID, servers(i))
Exit Function
End If
If attempt < config.RetryCount Then
Sleep config.RetryDelay
End If
Next attempt
Next i
Err.Raise vbObjectError + 1001, , "All servers unavailable"
End Function</code></pre>
<h2 id="3-configuration-cache-manager">3. Configuration Cache Manager</h2>
<pre><code class="language-vbnet">Type CachedServerInfo
ServerName As String
Settings As Long
CacheTime As Date
TTL As Long ' Time to live in seconds
End Type
Private m_Cache As Collection
Sub InitializeCache()
Set m_Cache = New Collection
End Sub
Function GetCachedServerSettings(progID As String, _
clsID As String, _
serverName As String, _
Optional cacheTTL As Long = 300) As Long
Dim cacheKey As String
Dim cached As CachedServerInfo
Dim i As Long
Dim found As Boolean
cacheKey = serverName
' Check cache
For i = 1 To m_Cache.Count
cached = m_Cache(i)
If cached.ServerName = cacheKey Then
If DateDiff("s", cached.CacheTime, Now) < cached.TTL Then
GetCachedServerSettings = cached.Settings
Exit Function
Else
m_Cache.Remove i
Exit For
End If
End If
Next i
' Not in cache or expired, fetch fresh
cached.ServerName = serverName
cached.Settings = GetAutoServerSettings(progID, clsID, serverName)
cached.CacheTime = Now
cached.TTL = cacheTTL
m_Cache.Add cached
GetCachedServerSettings = cached.Settings
End Function</code></pre>
<h2 id="4-server-pool-manager">4. Server Pool Manager</h2>
<pre><code class="language-vbnet">Type ServerPool
PoolName As String
Servers() As String
ProgID As String
CLSID As String
End Type
Function GetHealthyServersFromPool(pool As ServerPool) As Collection
Dim healthyServers As New Collection
Dim i As Long
Dim settings As Long
For i = LBound(pool.Servers) To UBound(pool.Servers)
On Error Resume Next
settings = GetAutoServerSettings(pool.ProgID, pool.CLSID, pool.Servers(i))
On Error GoTo 0
If settings <> 0 Then
healthyServers.Add pool.Servers(i)
End If
Next i
Set GetHealthyServersFromPool = healthyServers
End Function
Function GetPoolStatistics(pool As ServerPool) As String
Dim total As Long
Dim healthy As Long
Dim i As Long
Dim settings As Long
total = UBound(pool.Servers) - LBound(pool.Servers) + 1
healthy = 0
For i = LBound(pool.Servers) To UBound(pool.Servers)
settings = GetAutoServerSettings(pool.ProgID, pool.CLSID, pool.Servers(i))
If settings <> 0 Then healthy = healthy + 1
Next i
GetPoolStatistics = pool.PoolName & ": " & healthy & "/" & total & " servers available"
End Function</code></pre>
<h1 id="error-handling">Error Handling</h1>
<pre><code class="language-vbnet">Function SafeGetAutoServerSettings(progID As String, _
clsID As String, _
serverName As String) As Long
On Error GoTo ErrorHandler
SafeGetAutoServerSettings = GetAutoServerSettings(progID, clsID, serverName)
Exit Function
ErrorHandler:
Select Case Err.Number
Case 429 ' ActiveX component can't create object
Debug.Print "Server not available: " & serverName
Case 462 ' Remote server machine does not exist
Debug.Print "Machine not found: " & serverName
Case 70 ' Permission denied
Debug.Print "Access denied to server: " & serverName
Case Else
Debug.Print "Error " & Err.Number & ": " & Err.Description
End Select
SafeGetAutoServerSettings = 0
End Function</code></pre>
<p>Common errors:
- <strong>Error 429</strong>: <code>ActiveX</code> component can't create object - server not registered or accessible.
- <strong>Error 462</strong>: Remote server machine does not exist or is unavailable.
- <strong>Error 70</strong>: Permission denied - insufficient <code>DCOM</code> permissions.
- <strong>Error 5</strong>: Invalid procedure call - invalid <code>ProgID</code> or <code>CLSID</code> format.</p>
<h1 id="performance-considerations">Performance Considerations</h1>
<ul>
<li>Network latency affects remote server queries</li>
<li>Consider caching results for frequently checked servers</li>
<li>Use timeouts for unresponsive servers</li>
<li>Parallel checks may improve performance for multiple servers</li>
<li>DCOM configuration on both client and server affects response time</li>
<li>Firewall settings can cause delays or failures</li>
</ul>
<h1 id="best-practices">Best Practices</h1>
<ol>
<li><strong>Always use error handling</strong> - network and <code>DCOM</code> issues are common</li>
<li><strong>Validate <code>ProgID</code> and <code>CLSID</code> format</strong> before calling</li>
<li><strong>Use descriptive server names</strong> for better diagnostics</li>
<li><strong>Implement retry logic</strong> for transient failures</li>
<li><strong>Cache results</strong> to reduce network overhead</li>
<li><strong>Log all queries</strong> for auditing and troubleshooting</li>
<li><strong>Test connectivity</strong> before production deployment</li>
<li><strong>Configure <code>DCOM</code> security</strong> appropriately on all servers</li>
</ol>
<h1 id="comparison-with-other-functions">Comparison with Other Functions</h1>
<h2 id="getautoserversettings-vs-createobject"><code>GetAutoServerSettings</code> vs <code>CreateObject</code></h2>
<pre><code class="language-vbnet">' GetAutoServerSettings - Query server settings
settings = GetAutoServerSettings(progID, clsID, serverName)
' CreateObject - Actually create server instance
Set obj = CreateObject(progID, serverName)</code></pre>
<h2 id="getautoserversettings-vs-getobject"><code>GetAutoServerSettings</code> vs <code>GetObject</code></h2>
<pre><code class="language-vbnet">' GetAutoServerSettings - Check DCOM configuration
settings = GetAutoServerSettings(progID, clsID, serverName)
' GetObject - Connect to existing instance
Set obj = GetObject(, progID)</code></pre>
<h1 id="limitations">Limitations</h1>
<ul>
<li>Windows-specific functionality (DCOM is Windows-only)</li>
<li>Requires DCOM to be enabled and properly configured</li>
<li>Network connectivity required for remote servers</li>
<li>Security settings may block access</li>
<li>Return value interpretation is not well documented</li>
<li>Limited to COM/DCOM servers</li>
<li>May not work with modern .NET components</li>
<li>Deprecated in favor of newer technologies (WCF, REST APIs)</li>
</ul>
<h1 id="dcom-configuration">DCOM Configuration</h1>
<p>For this function to work properly:
1. <strong>Component Services</strong> (dcomcnfg) must be configured
2. <strong>DCOM permissions</strong> must allow remote access
3. <strong>Firewall rules</strong> must permit DCOM traffic
4. <strong>Authentication level</strong> must be set appropriately
5. <strong>Launch and activation permissions</strong> must be granted</p>
<h1 id="related-functions">Related Functions</h1>
<ul>
<li><code>CreateObject</code> - Creates an instance of a <code>COM</code> object</li>
<li><code>GetObject</code> - Returns a reference to an <code>ActiveX</code> object</li>
<li><code>CallByName</code> - Executes methods on objects dynamically</li>
<li><code>TypeName</code> - Returns type information about an object</li>
<li><code>GetSetting</code> - Retrieves application settings from registry</li>
</ul>
</article>
<div style="margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--border-color);">
<p>
<a href="index.html">← Back to Environment</a> |
<a href="../index.html">View all functions</a>
</p>
</div>
</main>
<footer>
<div class="container">
<p>© 2024-2026 VB6Parse Contributors. Licensed under the MIT License.</p>
</div>
</footer>
</body>
</html>