67 lines
2.0 KiB
PowerShell
67 lines
2.0 KiB
PowerShell
|
|
#Requires -Version 5.1
|
||
|
|
<#
|
||
|
|
.SYNOPSIS
|
||
|
|
Register TwinCAT COM components for headless automation.
|
||
|
|
|
||
|
|
.DESCRIPTION
|
||
|
|
Registers TcSysManager and related COM DLLs so that
|
||
|
|
New-Object -ComObject TcXaeShell.DTE.17.0 works without a prior
|
||
|
|
interactive TwinCAT session.
|
||
|
|
|
||
|
|
Run once from an elevated PowerShell.
|
||
|
|
|
||
|
|
.EXAMPLE
|
||
|
|
.\tc-register.ps1
|
||
|
|
.\tc-register.ps1 -RepairPackage
|
||
|
|
#>
|
||
|
|
[CmdletBinding()]
|
||
|
|
param(
|
||
|
|
[switch]$RepairPackage
|
||
|
|
)
|
||
|
|
$tcBase = "C:\Program Files (x86)\Beckhoff\TwinCAT\3.1\Components\Base"
|
||
|
|
$dlls = @(
|
||
|
|
"TwinCAT System Manager.dll",
|
||
|
|
"TcSysManCmd.dll",
|
||
|
|
"TcSysManRM.dll"
|
||
|
|
)
|
||
|
|
|
||
|
|
Write-Host "=== Register TwinCAT COM Components ===" -ForegroundColor Cyan
|
||
|
|
|
||
|
|
foreach ($dll in $dlls) {
|
||
|
|
$path = Join-Path $tcBase $dll
|
||
|
|
if (Test-Path $path) {
|
||
|
|
Write-Host " regsvr32: $dll" -NoNewline
|
||
|
|
& regsvr32 /s $path 2>&1 | Out-Null
|
||
|
|
Write-Host " done" -ForegroundColor Green
|
||
|
|
} else {
|
||
|
|
Write-Host " skip: $dll (not found)" -ForegroundColor Yellow
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# .NET regasm for Automation DLL
|
||
|
|
$autoDll = Get-ChildItem -Path "C:\Program Files\TwinCAT\3.1\x64" -Filter "TwinCAT.XAE.Automation.*.dll" -ErrorAction SilentlyContinue | Select-Object -First 1
|
||
|
|
if ($autoDll) {
|
||
|
|
$regasm = Join-Path $env:WINDIR "Microsoft.NET\Framework64\v4.0.30319\regasm.exe"
|
||
|
|
Write-Host " regasm: $($autoDll.Name)" -NoNewline
|
||
|
|
& $regasm /silent /codebase $autoDll.FullName 2>&1 | Out-Null
|
||
|
|
Write-Host " done" -ForegroundColor Green
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($RepairPackage) {
|
||
|
|
Write-Host " TcPkg repair TwinCAT.Standard.XAE..." -NoNewline
|
||
|
|
& "C:\Program Files (x86)\Beckhoff\TwinCAT\3.1\Components\Base\TcPkg.exe" repair TwinCAT.Standard.XAE 2>&1 | Out-Null
|
||
|
|
Write-Host " done" -ForegroundColor Green
|
||
|
|
}
|
||
|
|
|
||
|
|
# Test
|
||
|
|
Write-Host " Testing TcXaeShell.DTE.17.0..." -NoNewline
|
||
|
|
try {
|
||
|
|
$test = New-Object -ComObject TcXaeShell.DTE.17.0 -ErrorAction Stop
|
||
|
|
$test.Quit()
|
||
|
|
Write-Host " OK" -ForegroundColor Green
|
||
|
|
} catch {
|
||
|
|
Write-Host " FAILED: $_" -ForegroundColor Red
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "=== Register complete ===" -ForegroundColor Cyan
|