improve:单文件
This commit is contained in:
@@ -439,6 +439,16 @@ namespace Ink_Canvas
|
|||||||
|
|
||||||
LogHelper.NewLog(string.Format("Ink Canvas Starting (Version: {0})", Assembly.GetExecutingAssembly().GetName().Version));
|
LogHelper.NewLog(string.Format("Ink Canvas Starting (Version: {0})", Assembly.GetExecutingAssembly().GetName().Version));
|
||||||
|
|
||||||
|
// 在应用启动时自动释放IACore相关DLL
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Helpers.IACoreDllExtractor.ExtractIACoreDlls();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"释放IACore DLL时出错: {ex.Message}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
|
||||||
// 记录应用启动(设备标识符)
|
// 记录应用启动(设备标识符)
|
||||||
DeviceIdentifier.RecordAppLaunch();
|
DeviceIdentifier.RecordAppLaunch();
|
||||||
LogHelper.WriteLogToFile($"App | 设备ID: {DeviceIdentifier.GetDeviceId()}");
|
LogHelper.WriteLogToFile($"App | 设备ID: {DeviceIdentifier.GetDeviceId()}");
|
||||||
|
|||||||
@@ -0,0 +1,168 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace Ink_Canvas.Helpers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// IACore DLL自动释放器
|
||||||
|
/// 在应用启动时自动释放IACore相关的DLL文件到应用程序目录
|
||||||
|
/// </summary>
|
||||||
|
public static class IACoreDllExtractor
|
||||||
|
{
|
||||||
|
private static readonly string[] RequiredDlls = {
|
||||||
|
"IACore.dll",
|
||||||
|
"IALoader.dll",
|
||||||
|
"IAWinFX.dll"
|
||||||
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 在应用启动时释放IACore相关DLL
|
||||||
|
/// </summary>
|
||||||
|
public static void ExtractIACoreDlls()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string appDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
LogHelper.WriteLogToFile("开始检查并释放IACore相关DLL文件");
|
||||||
|
|
||||||
|
foreach (string dllName in RequiredDlls)
|
||||||
|
{
|
||||||
|
string targetPath = Path.Combine(appDirectory, dllName);
|
||||||
|
|
||||||
|
// 检查文件是否已存在且有效
|
||||||
|
if (File.Exists(targetPath) && IsValidDll(targetPath))
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"{dllName} 已存在且有效,跳过释放");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从嵌入资源中释放DLL
|
||||||
|
if (ExtractDllFromResource(dllName, targetPath))
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"成功释放 {dllName} 到 {targetPath}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"警告:无法释放 {dllName},可能影响形状识别功能", LogHelper.LogType.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LogHelper.WriteLogToFile("IACore DLL释放检查完成");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"释放IACore DLL时出错: {ex.Message}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从嵌入资源中提取DLL文件
|
||||||
|
/// </summary>
|
||||||
|
private static bool ExtractDllFromResource(string dllName, string targetPath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||||
|
string resourceName = $"Ink_Canvas.Resources.IACore.{dllName}";
|
||||||
|
|
||||||
|
using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName))
|
||||||
|
{
|
||||||
|
if (resourceStream == null)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"未找到嵌入资源: {resourceName}", LogHelper.LogType.Warning);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保目标目录存在
|
||||||
|
string targetDirectory = Path.GetDirectoryName(targetPath);
|
||||||
|
if (!Directory.Exists(targetDirectory))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(targetDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入文件
|
||||||
|
using (FileStream fileStream = new FileStream(targetPath, FileMode.Create, FileAccess.Write))
|
||||||
|
{
|
||||||
|
resourceStream.CopyTo(fileStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"从资源提取 {dllName} 失败: {ex.Message}", LogHelper.LogType.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 检查DLL文件是否有效
|
||||||
|
/// </summary>
|
||||||
|
private static bool IsValidDll(string filePath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!File.Exists(filePath))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
FileInfo fileInfo = new FileInfo(filePath);
|
||||||
|
|
||||||
|
// 检查文件大小(空文件或过小的文件可能无效)
|
||||||
|
if (fileInfo.Length < 1024) // 小于1KB可能无效
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// 简单检查PE头(DLL文件应该以MZ开头)
|
||||||
|
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
||||||
|
{
|
||||||
|
byte[] buffer = new byte[2];
|
||||||
|
if (fs.Read(buffer, 0, 2) == 2)
|
||||||
|
{
|
||||||
|
return buffer[0] == 0x4D && buffer[1] == 0x5A; // "MZ"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 清理释放的DLL文件(可选,在应用退出时调用)
|
||||||
|
/// </summary>
|
||||||
|
public static void CleanupExtractedDlls()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string appDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
|
||||||
|
foreach (string dllName in RequiredDlls)
|
||||||
|
{
|
||||||
|
string filePath = Path.Combine(appDirectory, dllName);
|
||||||
|
|
||||||
|
if (File.Exists(filePath))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Delete(filePath);
|
||||||
|
LogHelper.WriteLogToFile($"已清理 {dllName}");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"清理 {dllName} 失败: {ex.Message}", LogHelper.LogType.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"清理IACore DLL时出错: {ex.Message}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -113,15 +113,15 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="IACore">
|
<Reference Include="IACore">
|
||||||
<HintPath>.\IACore.dll</HintPath>
|
<HintPath>.\IACore.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>False</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="IALoader">
|
<Reference Include="IALoader">
|
||||||
<HintPath>.\IALoader.dll</HintPath>
|
<HintPath>.\IALoader.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>False</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="IAWinFX">
|
<Reference Include="IAWinFX">
|
||||||
<HintPath>.\IAWinFX.dll</HintPath>
|
<HintPath>.\IAWinFX.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>False</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.VisualBasic" />
|
<Reference Include="Microsoft.VisualBasic" />
|
||||||
<Reference Include="netstandard" />
|
<Reference Include="netstandard" />
|
||||||
@@ -190,6 +190,11 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Resources\TimerDownNotice.wav" />
|
<None Include="Resources\TimerDownNotice.wav" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Resources\IACore\IACore.dll" />
|
||||||
|
<EmbeddedResource Include="Resources\IACore\IALoader.dll" />
|
||||||
|
<EmbeddedResource Include="Resources\IACore\IAWinFX.dll" />
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\Cursor.cur" />
|
<Resource Include="Resources\Cursors\Cursor.cur" />
|
||||||
<Resource Include="Resources\Cursors\Pen.cur" />
|
<Resource Include="Resources\Cursors\Pen.cur" />
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,20 +0,0 @@
|
|||||||
InkCanvasForClass
|
|
||||||
|
|
||||||
|
|
||||||
winexe
|
|
||||||
C#
|
|
||||||
.cs
|
|
||||||
E:\ICC CE\ICC CE main\community\Ink Canvas\obj\Debug\net472\
|
|
||||||
Ink_Canvas
|
|
||||||
none
|
|
||||||
false
|
|
||||||
TRACE;DEBUG;NETFRAMEWORK;NET472;;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45_OR_GREATER;NET451_OR_GREATER;NET452_OR_GREATER;NET46_OR_GREATER;NET461_OR_GREATER;NET462_OR_GREATER;NET47_OR_GREATER;NET471_OR_GREATER;NET472_OR_GREATER
|
|
||||||
E:\ICC CE\ICC CE main\community\Ink Canvas\App.xaml
|
|
||||||
22-2143008179
|
|
||||||
|
|
||||||
79-461684434
|
|
||||||
471037513499
|
|
||||||
Helpers\Plugins\BuiltIn\SuperLauncher\LauncherSettingsControl.xaml;Helpers\Plugins\BuiltIn\SuperLauncher\LauncherWindow.xaml;MainWindow.xaml;MainWindow_cs\MW_Eraser.xaml;Resources\DrawShapeImageDictionary.xaml;Resources\IconImageDictionary.xaml;Resources\SeewoImageDictionary.xaml;Resources\Styles\Dark.xaml;Resources\Styles\Light.xaml;Windows\AddCustomIconWindow.xaml;Windows\AddPickNameBackgroundWindow.xaml;Windows\CountdownTimerWindow.xaml;Windows\CustomIconWindow.xaml;Windows\CycleProcessBar.xaml;Windows\HasNewUpdateWindow.xaml;Windows\HistoryRollbackWindow.xaml;Windows\ManagePickNameBackgroundsWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\PluginSettingsWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml;
|
|
||||||
|
|
||||||
False
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user