Files
DCIT/DCIT.App/Program.cs

105 lines
4.5 KiB
C#
Raw Normal View History

2026-07-13 10:04:36 +08:00
using System;
using System.Linq;
using System.Windows.Forms;
using DCIT.App.Forms;
using DCIT.App.Presentation;
using DCIT.Core.Services;
namespace DCIT.App
{
internal static class Program
{
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
var startupDirectory = AppContext.BaseDirectory;
var runtimeValidationService = new RuntimeEnvironmentValidationService(startupDirectory);
var runtimeValidationResult = runtimeValidationService.Validate();
if (runtimeValidationResult.HasBlockingIssues)
{
MessageBox.Show(
BuildRuntimeValidationMessage(runtimeValidationResult),
"WORD 2007 格式调整软件",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
var logService = new LogService(startupDirectory);
LogRuntimeValidation(logService, runtimeValidationResult);
var configurationService = new ConfigurationService(startupDirectory);
var configurationLoadResult = configurationService.Load();
var fileScanService = new FileScanService();
var ruleService = new RuleService();
var docConversionService = new OfficeDocConversionService(startupDirectory);
var wordTextExtractionService = new WordTextExtractionService(docConversionService);
var autoExtractService = new AutoExtractService(wordTextExtractionService);
var bmpDiffCodec = new BmpDiffCodec();
var diffSerializationService = new DiffSerializationService(bmpDiffCodec);
var documentProcessingService = new DocumentProcessingService(diffSerializationService, docConversionService);
var dialogService = new UserDialogService();
var temporaryFileCleanupService = new TemporaryFileCleanupService();
var cleanupResult = temporaryFileCleanupService.Cleanup(configurationLoadResult.Config);
if (cleanupResult.RemovedFiles.Count > 0)
{
logService.Info("TEMP_CLEANUP", string.Format("启动时已清理 {0} 个遗留临时文件。", cleanupResult.RemovedFiles.Count));
}
foreach (var failure in cleanupResult.Failures)
{
logService.Warning("TEMP_CLEANUP_FAIL", failure);
}
Application.Run(
new MainForm(
configurationService,
logService,
fileScanService,
ruleService,
autoExtractService,
documentProcessingService,
dialogService));
}
catch (Exception ex)
{
MessageBox.Show(
"程序启动失败: " + ex.Message,
"WORD 2007 格式调整软件",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
private static string BuildRuntimeValidationMessage(DCIT.Core.Models.RuntimeEnvironmentValidationResult validationResult)
{
var lines = validationResult.BlockingIssues.Select(issue => "- " + issue).ToList();
return "程序启动前环境检查未通过:" + Environment.NewLine + string.Join(Environment.NewLine, lines);
}
private static void LogRuntimeValidation(LogService logService, DCIT.Core.Models.RuntimeEnvironmentValidationResult validationResult)
{
logService.Info("ENV_STARTUP", "启动目录可写: " + validationResult.StartupDirectory);
if (!string.IsNullOrWhiteSpace(validationResult.ResolvedAutomationProgId))
{
logService.Info("ENV_AUTOMATION", "检测到可自动化组件: " + validationResult.ResolvedAutomationProgId);
}
if (!string.IsNullOrWhiteSpace(validationResult.ResolvedDocToPath))
{
logService.Info("ENV_DOCTO", "检测到 docto.exe: " + validationResult.ResolvedDocToPath);
}
foreach (var warning in validationResult.Warnings)
{
logService.Warning("ENV_WARNING", warning);
}
}
}
}