105 lines
4.5 KiB
C#
105 lines
4.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |