// Test analisi progetto Visum giΓ caricato
import { spawn } from 'child_process';
console.log("π ANALISI PROGETTO VISUM CARICATO");
console.log("β".repeat(40));
async function analyzeLoadedProject() {
console.log("π Analizzando il progetto Campoleone giΓ caricato...\n");
const script = `
try {
# Check if Visum is running
$visumProcess = Get-Process -Name "Visum250" -ErrorAction SilentlyContinue
if (!$visumProcess) {
Write-Host "β Visum non Γ¨ in esecuzione"
@{ success = $false; error = "Visum not running" } | ConvertTo-Json
exit
}
Write-Host "β
Visum processo trovato: ID $($visumProcess.Id)"
Write-Host "π Finestra: $($visumProcess.MainWindowTitle)"
Write-Host ""
# Method 1: Try New-Object approach (create new instance and try to connect)
Write-Host "π Metodo 1: Creazione nuova istanza COM..."
try {
$visum = New-Object -ComObject "Visum.Visum"
Write-Host "β
Oggetto COM creato"
# Try to connect to existing session
$visum.LoadVersion("2024") # Try different version
Write-Host "β
Versione caricata"
# Check if we have network data
if ($visum.Net) {
$nodeCount = $visum.Net.Nodes.Count
$linkCount = $visum.Net.Links.Count
$zoneCount = $visum.Net.Zones.Count
Write-Host "π Network trovata!"
Write-Host " Nodi: $nodeCount"
Write-Host " Link: $linkCount"
Write-Host " Zone: $zoneCount"
if ($nodeCount -gt 0) {
@{
success = $true
method = "New-Object"
networkStats = @{
nodes = $nodeCount
links = $linkCount
zones = $zoneCount
}
message = "Network data found via New-Object"
} | ConvertTo-Json -Depth 3
exit
}
}
Write-Host "β οΈ Network vuota con New-Object"
} catch {
Write-Host "β New-Object fallito: $($_.Exception.Message)"
}
# Method 2: Try file-based analysis
Write-Host ""
Write-Host "π Metodo 2: Analisi diretta file progetto..."
$projectFile = "H:\\go\\italferr2025\\Campoleone\\100625_Versione_base_v0.3_sub_ok_priv.ver"
if (Test-Path $projectFile) {
$fileInfo = Get-Item $projectFile
Write-Host "β
File progetto trovato:"
Write-Host " Path: $projectFile"
Write-Host " Size: $([math]::Round($fileInfo.Length / 1MB, 2)) MB"
Write-Host " Modified: $($fileInfo.LastWriteTime)"
# Try to read some basic info from the file
$fileSize = $fileInfo.Length
@{
success = $true
method = "File-based"
projectFile = $projectFile
fileSize = $fileSize
fileSizeMB = [math]::Round($fileSize / 1MB, 2)
lastModified = $fileInfo.LastWriteTime.ToString()
visumRunning = $true
processId = $visumProcess.Id
windowTitle = $visumProcess.MainWindowTitle
message = "Project file analyzed, Visum process confirmed"
} | ConvertTo-Json -Depth 3
} else {
Write-Host "β File progetto non trovato: $projectFile"
@{
success = $false
error = "Project file not found"
processId = $visumProcess.Id
windowTitle = $visumProcess.MainWindowTitle
} | ConvertTo-Json
}
} catch {
Write-Host "β Errore generale: $($_.Exception.Message)"
@{
success = $false
error = $_.Exception.Message
} | ConvertTo-Json
}
`;
const powershell = spawn('powershell', ['-ExecutionPolicy', 'Bypass', '-Command', script]);
let output = '';
let stderr = '';
powershell.stdout.on('data', (data) => {
const text = data.toString();
output += text;
console.log("π€", text.trim());
});
powershell.stderr.on('data', (data) => {
const text = data.toString();
stderr += text;
console.log("β οΈ", text.trim());
});
return new Promise((resolve) => {
powershell.on('close', (code) => {
console.log(`\nπ PowerShell chiuso con codice: ${code}`);
try {
const jsonStart = output.indexOf('{');
if (jsonStart !== -1) {
const jsonStr = output.substring(jsonStart);
const result = JSON.parse(jsonStr);
console.log("β
Risultato analisi:", result);
resolve(result);
} else {
console.log("β Nessun JSON trovato nell'output");
resolve({ success: false, error: 'No JSON found' });
}
} catch (e) {
console.log("β Errore parsing JSON:", e.message);
console.log("Raw output:", output);
resolve({ success: false, error: 'JSON parse error' });
}
});
setTimeout(() => {
powershell.kill();
resolve({ success: false, error: 'Timeout' });
}, 20000);
});
}
async function suggestSolutions() {
console.log("\nπ‘ SOLUZIONI ALTERNATIVE");
console.log("β".repeat(25));
console.log("π§ Opzioni per analisi network:");
console.log(" 1. β
File-based: Analisi diretta file .ver");
console.log(" 2. π Script Python: Usare VisumPy se disponibile");
console.log(" 3. π₯οΈ Manual: Interfaccia Visum per export dati");
console.log(" 4. π Registry: Controllare COM registration");
console.log(" 5. π Alternative: Usare file di export CSV/XML");
console.log("\nπ― RACCOMANDAZIONE:");
console.log(" Dato che Visum Γ¨ visibile e il progetto Γ¨ caricato,");
console.log(" possiamo usare l'interfaccia Visum per esportare");
console.log(" i dati di rete in formato analizzabile.");
}
async function runAnalysis() {
const result = await analyzeLoadedProject();
console.log("\n" + "β".repeat(40));
console.log("π RISULTATO ANALISI");
console.log("β".repeat(40));
if (result.success) {
console.log("π β
ANALISI COMPLETATA!");
console.log(` Metodo: ${result.method}`);
if (result.networkStats) {
console.log("π Statistiche Network:");
console.log(` β’ Nodi: ${result.networkStats.nodes}`);
console.log(` β’ Link: ${result.networkStats.links}`);
console.log(` β’ Zone: ${result.networkStats.zones}`);
}
if (result.projectFile) {
console.log("π File Progetto:");
console.log(` β’ Path: ${result.projectFile}`);
console.log(` β’ Size: ${result.fileSizeMB} MB`);
console.log(` β’ Modified: ${result.lastModified}`);
}
console.log("π₯οΈ Visum Status:");
console.log(` β’ Process ID: ${result.processId}`);
console.log(` β’ Window: ${result.windowTitle || 'In caricamento...'}`);
} else {
console.log("β ANALISI FALLITA");
console.log(` Errore: ${result.error}`);
}
await suggestSolutions();
}
runAnalysis().catch(console.error);