diff --git a/CompressToExe/CompressToExe.csproj b/CompressToExe/CompressToExe.csproj
new file mode 100644
index 00000000..b57c89e6
--- /dev/null
+++ b/CompressToExe/CompressToExe.csproj
@@ -0,0 +1,11 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
\ No newline at end of file
diff --git a/CompressToExe/Form1.Designer.cs b/CompressToExe/Form1.Designer.cs
new file mode 100644
index 00000000..b758a303
--- /dev/null
+++ b/CompressToExe/Form1.Designer.cs
@@ -0,0 +1,39 @@
+namespace CompressToExe
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Text = "Form1";
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/CompressToExe/Form1.cs b/CompressToExe/Form1.cs
new file mode 100644
index 00000000..b5803f23
--- /dev/null
+++ b/CompressToExe/Form1.cs
@@ -0,0 +1,10 @@
+namespace CompressToExe
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/CompressToExe/Program.cs b/CompressToExe/Program.cs
new file mode 100644
index 00000000..7a17e829
--- /dev/null
+++ b/CompressToExe/Program.cs
@@ -0,0 +1,17 @@
+namespace CompressToExe
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new Form1());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EI_Image_Viewer/EI_Image_Viewer.vdproj b/EI_Image_Viewer/EI_Image_Viewer.vdproj
new file mode 100644
index 00000000..c5764318
--- /dev/null
+++ b/EI_Image_Viewer/EI_Image_Viewer.vdproj
@@ -0,0 +1,723 @@
+"DeployProject"
+{
+"VSVersion" = "3:800"
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
+"IsWebType" = "8:FALSE"
+"ProjectName" = "8:EI_Image_Viewer"
+"LanguageId" = "3:2052"
+"CodePage" = "3:936"
+"UILanguageId" = "3:2052"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
+ "Hierarchy"
+ {
+ "Entry"
+ {
+ "MsmKey" = "8:_671ACE803849427ABF43662CDE6B54E3"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6BD8B282CE934C3AAD3841638BE9D51E"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ }
+ "Configurations"
+ {
+ "Debug"
+ {
+ "DisplayName" = "8:Debug"
+ "IsDebugOnly" = "11:TRUE"
+ "IsReleaseOnly" = "11:FALSE"
+ "OutputFilename" = "8:Debug\\EI_Image_Viewer.msi"
+ "PackageFilesAs" = "3:2"
+ "PackageFileSize" = "3:-2147483648"
+ "CabType" = "3:1"
+ "Compression" = "3:2"
+ "SignOutput" = "11:FALSE"
+ "CertificateFile" = "8:"
+ "PrivateKeyFile" = "8:"
+ "TimeStampServer" = "8:"
+ "InstallerBootstrapper" = "3:2"
+ }
+ "Release"
+ {
+ "DisplayName" = "8:Release"
+ "IsDebugOnly" = "11:FALSE"
+ "IsReleaseOnly" = "11:TRUE"
+ "OutputFilename" = "8:Release\\EI_Image_Viewer.msi"
+ "PackageFilesAs" = "3:2"
+ "PackageFileSize" = "3:-2147483648"
+ "CabType" = "3:1"
+ "Compression" = "3:2"
+ "SignOutput" = "11:FALSE"
+ "CertificateFile" = "8:"
+ "PrivateKeyFile" = "8:"
+ "TimeStampServer" = "8:"
+ "InstallerBootstrapper" = "3:2"
+ }
+ }
+ "Deployable"
+ {
+ "CustomAction"
+ {
+ }
+ "DefaultFeature"
+ {
+ "Name" = "8:DefaultFeature"
+ "Title" = "8:"
+ "Description" = "8:"
+ }
+ "ExternalPersistence"
+ {
+ "LaunchCondition"
+ {
+ }
+ }
+ "File"
+ {
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6BD8B282CE934C3AAD3841638BE9D51E"
+ {
+ "SourcePath" = "8:D:\\Soft\\WX\\WeChat Files\\WeChat Files\\wxid_r2imdzb7j3q922\\FileStorage\\File\\2023-04\\favicon.ico"
+ "TargetName" = "8:favicon.ico"
+ "Tag" = "8:"
+ "Folder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ }
+ "FileType"
+ {
+ }
+ "Folder"
+ {
+ "{1525181F-901A-416C-8A58-119130FE478E}:_8D81C358540F4384A07E881ECA670B06"
+ {
+ "Name" = "8:#1919"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:ProgramMenuFolder"
+ "Folders"
+ {
+ }
+ }
+ "{1525181F-901A-416C-8A58-119130FE478E}:_CEB3ABC1E0034A319A55466553922586"
+ {
+ "Name" = "8:#1916"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:DesktopFolder"
+ "Folders"
+ {
+ }
+ }
+ "{3C67513D-01DD-4637-8A68-80971EB9504F}:_FC6A2494EDBE4963A84EBD88E04B3F04"
+ {
+ "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
+ "Name" = "8:#1925"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:TARGETDIR"
+ "Folders"
+ {
+ }
+ }
+ }
+ "LaunchCondition"
+ {
+ }
+ "Locator"
+ {
+ }
+ "MsiBootstrapper"
+ {
+ "LangId" = "3:2052"
+ "RequiresElevation" = "11:FALSE"
+ }
+ "Product"
+ {
+ "Name" = "8:Microsoft Visual Studio"
+ "ProductName" = "8:EI_Image_Viewer"
+ "ProductCode" = "8:{E8F96E3C-EA54-429B-BB58-B5ED2D6FCA8C}"
+ "PackageCode" = "8:{908AC8AE-E525-45D8-A456-9C695A3B4D9C}"
+ "UpgradeCode" = "8:{DAEA1B25-CE0C-4ED7-A6E1-A0E32F09B34B}"
+ "AspNetVersion" = "8:4.0.30319.0"
+ "RestartWWWService" = "11:FALSE"
+ "RemovePreviousVersions" = "11:FALSE"
+ "DetectNewerInstalledVersion" = "11:TRUE"
+ "InstallAllUsers" = "11:FALSE"
+ "ProductVersion" = "8:1.0.0"
+ "Manufacturer" = "8:微软中国"
+ "ARPHELPTELEPHONE" = "8:"
+ "ARPHELPLINK" = "8:"
+ "Title" = "8:EI_Image_Viewer"
+ "Subject" = "8:"
+ "ARPCONTACT" = "8:微软中国"
+ "Keywords" = "8:"
+ "ARPCOMMENTS" = "8:"
+ "ARPURLINFOABOUT" = "8:"
+ "ARPPRODUCTICON" = "8:"
+ "ARPIconIndex" = "3:0"
+ "SearchPath" = "8:"
+ "UseSystemSearchPath" = "11:TRUE"
+ "TargetPlatform" = "3:0"
+ "PreBuildEvent" = "8:"
+ "PostBuildEvent" = "8:"
+ "RunPostBuildEvent" = "3:0"
+ }
+ "Registry"
+ {
+ "HKLM"
+ {
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_4B3A8DDB66C14C26B1FDEB73E654D73E"
+ {
+ "Name" = "8:Software"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D4DC14C1806A4415B3D158086D20A384"
+ {
+ "Name" = "8:[Manufacturer]"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ }
+ "HKCU"
+ {
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FDC39226C9AF424BA1A2EB9CB480C9AF"
+ {
+ "Name" = "8:Software"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_EA384AA6FD9B43348966A96518AFEDCB"
+ {
+ "Name" = "8:[Manufacturer]"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ }
+ "HKCR"
+ {
+ "Keys"
+ {
+ }
+ }
+ "HKU"
+ {
+ "Keys"
+ {
+ }
+ }
+ "HKPU"
+ {
+ "Keys"
+ {
+ }
+ }
+ }
+ "Sequences"
+ {
+ }
+ "Shortcut"
+ {
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_36E629868FD94281A9512B653A68C76E"
+ {
+ "Name" = "8:Shortcut to 发布项 from Start (Active)"
+ "Arguments" = "8:"
+ "Description" = "8:"
+ "ShowCmd" = "3:1"
+ "IconIndex" = "3:0"
+ "Transitive" = "11:FALSE"
+ "Target" = "8:_671ACE803849427ABF43662CDE6B54E3"
+ "Folder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
+ "WorkingFolder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
+ "Icon" = "8:_6BD8B282CE934C3AAD3841638BE9D51E"
+ "Feature" = "8:"
+ }
+ }
+ "UserInterface"
+ {
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1CCA0CBF4AED4FC48560F2AF5AAD31B6"
+ {
+ "Name" = "8:#1900"
+ "Sequence" = "3:2"
+ "Attributes" = "3:1"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_36E70F23303C475EAD3030D279A6D0AE"
+ {
+ "Sequence" = "3:200"
+ "DisplayName" = "8:安装文件夹"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminFolderDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D5D84CAA84CE405B84FCD1F603BF5A04"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:欢迎使用"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "CopyrightWarning"
+ {
+ "Name" = "8:CopyrightWarning"
+ "DisplayName" = "8:#1002"
+ "Description" = "8:#1102"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1202"
+ "DefaultValue" = "8:#1202"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "Welcome"
+ {
+ "Name" = "8:Welcome"
+ "DisplayName" = "8:#1003"
+ "Description" = "8:#1103"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1203"
+ "DefaultValue" = "8:#1203"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F2AE58A5FFC9409F8C3BC02EC666A4E1"
+ {
+ "Sequence" = "3:300"
+ "DisplayName" = "8:确认安装"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminConfirmDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_621AF3658AF94FB7B1CDFF5DF1609491"
+ {
+ "Name" = "8:#1902"
+ "Sequence" = "3:2"
+ "Attributes" = "3:3"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_818FD021D326496AB2F1D52C8713ACE1"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:已完成"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminFinishedDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_8B8A18872BD040FF9FD618D775AFD701"
+ {
+ "Name" = "8:#1901"
+ "Sequence" = "3:2"
+ "Attributes" = "3:2"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C476041D34EB4C48B4BBF6EE9B23EB0B"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:进度"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminProgressDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "ShowProgress"
+ {
+ "Name" = "8:ShowProgress"
+ "DisplayName" = "8:#1009"
+ "Description" = "8:#1109"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:1"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_A83D160A087845238F7A677809EDA0C8"
+ {
+ "UseDynamicProperties" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdUserInterface.wim"
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_AA1E9CA25272498B836014BB47156D90"
+ {
+ "Name" = "8:#1901"
+ "Sequence" = "3:1"
+ "Attributes" = "3:2"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_251EAFC6E38642FBB5C702BE6B1FDB30"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:进度"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdProgressDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "ShowProgress"
+ {
+ "Name" = "8:ShowProgress"
+ "DisplayName" = "8:#1009"
+ "Description" = "8:#1109"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:1"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C9A8427C4B4A483095D2544D9175A5E4"
+ {
+ "Name" = "8:#1900"
+ "Sequence" = "3:1"
+ "Attributes" = "3:1"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_70E6B3E76711448496915BDC2763B21F"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:欢迎使用"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdWelcomeDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "CopyrightWarning"
+ {
+ "Name" = "8:CopyrightWarning"
+ "DisplayName" = "8:#1002"
+ "Description" = "8:#1102"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1202"
+ "DefaultValue" = "8:#1202"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "Welcome"
+ {
+ "Name" = "8:Welcome"
+ "DisplayName" = "8:#1003"
+ "Description" = "8:#1103"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1203"
+ "DefaultValue" = "8:#1203"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_978CF68169D34FF7A0C440DCE87C41F7"
+ {
+ "Sequence" = "3:300"
+ "DisplayName" = "8:确认安装"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdConfirmDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E17D627579F34787981DEE6B595B7F1E"
+ {
+ "Sequence" = "3:200"
+ "DisplayName" = "8:安装文件夹"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdFolderDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "InstallAllUsersVisible"
+ {
+ "Name" = "8:InstallAllUsersVisible"
+ "DisplayName" = "8:#1059"
+ "Description" = "8:#1159"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:1"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_CF08905C7B824DAA802D43F4223E1BA2"
+ {
+ "UseDynamicProperties" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdBasicDialogs.wim"
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_D2E0AB446E6241D8ABE6FD9CD0E01163"
+ {
+ "Name" = "8:#1902"
+ "Sequence" = "3:1"
+ "Attributes" = "3:3"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_315C6B4D72B74607BEDFF0BCFC8DD40F"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:已完成"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdFinishedDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "UpdateText"
+ {
+ "Name" = "8:UpdateText"
+ "DisplayName" = "8:#1058"
+ "Description" = "8:#1158"
+ "Type" = "3:15"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1258"
+ "DefaultValue" = "8:#1258"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ }
+ "MergeModule"
+ {
+ }
+ "ProjectOutput"
+ {
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_671ACE803849427ABF43662CDE6B54E3"
+ {
+ "SourcePath" = "8:..\\Start\\obj\\Debug\\net6.0-windows\\apphost.exe"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:PublishItems"
+ "OutputProjectGuid" = "8:{D96F4B52-359C-43C9-8110-BAD1437F9280}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ }
+ }
+}
diff --git a/IRaCIS.Core.API/Program.cs b/IRaCIS.Core.API/Program.cs
index 10a98ac4..e58662a7 100644
--- a/IRaCIS.Core.API/Program.cs
+++ b/IRaCIS.Core.API/Program.cs
@@ -76,50 +76,50 @@ namespace IRaCIS.Core.API
#region ֤
- //if (!File.Exists($@"C:\ProgramData\.xingcang\config.json"))
- //{
- // Console.WriteLine("ǰδע");
- // Log.Logger.Error("ǰδע");
- // Console.ReadLine();
- // return;
- //}
- //else
- //{
- // var json = File.ReadAllText($@"C:\ProgramData\.xingcang\config.json");
+ if (!File.Exists($@"C:\ProgramData\.xingcang\config.json"))
+ {
+ Console.WriteLine("ǰδע");
+ Log.Logger.Error("ǰδע");
+ Console.ReadLine();
+ return;
+ }
+ else
+ {
+ var json = File.ReadAllText($@"C:\ProgramData\.xingcang\config.json");
- // JObject jsonObject = JObject.Parse(json);
+ JObject jsonObject = JObject.Parse(json);
- // var key = jsonObject["key"].ToString();
+ var key = jsonObject["key"].ToString();
- // var value = jsonObject["value"].ToString();
+ var value = jsonObject["value"].ToString();
- // var physicalAddressList = NetworkInterface.GetAllNetworkInterfaces().Select(t => t.GetPhysicalAddress().ToString());
+ var physicalAddressList = NetworkInterface.GetAllNetworkInterfaces().Select(t => t.GetPhysicalAddress().ToString());
- // // жļĻǷDZ
- // if (!physicalAddressList.Contains(key))
- // {
- // Console.WriteLine("ͱӦ");
- // Log.Logger.Error("ͱӦ");
- // Console.ReadLine();
+ // жļĻǷDZ
+ if (!physicalAddressList.Contains(key))
+ {
+ Console.WriteLine("ͱӦ");
+ Log.Logger.Error("ͱӦ");
+ Console.ReadLine();
- // return;
- // }
+ return;
+ }
- // var secrete = MD5Helper.Md5($"{key}_XINGCANG");
+ var secrete = MD5Helper.Md5($"{key}_XINGCANG");
- // if (value != secrete)
- // {
- // Console.WriteLine("ע벻ƥ");
- // Log.Logger.Error("ע벻ƥ");
- // Console.ReadLine();
+ if (value != secrete)
+ {
+ Console.WriteLine("ע벻ƥ");
+ Log.Logger.Error("ע벻ƥ");
+ Console.ReadLine();
- // return;
+ return;
- // }
+ }
- //}
+ }
#endregion
diff --git a/IRaCIS.Core.Application/Helper/NpoiWordHelper.cs b/IRaCIS.Core.Application/Helper/NpoiWordHelper.cs
deleted file mode 100644
index 2e993214..00000000
--- a/IRaCIS.Core.Application/Helper/NpoiWordHelper.cs
+++ /dev/null
@@ -1,171 +0,0 @@
-
-using IRaCIS.Core.Application.Helper;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.AspNetCore.Mvc;
-using NPOI.OpenXmlFormats.Wordprocessing;
-using NPOI.XWPF.UserModel;
-using System.Collections;
-using System.Reflection;
-
-namespace IRaCIS.Core.Application.Service;
-
-public static class NpoiWordHelper
-{
- public static async Task TemplateExportWordAsync(string code, object data, IRepository? _commonDocumentRepository, IWebHostEnvironment _hostEnvironment)
- {
- //var (physicalPath, fileNmae) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);
-
- var physicalPath = code;
-
-
- using (FileStream stream = File.OpenRead(physicalPath))
- {
- XWPFDocument doc = new XWPFDocument(stream);
- //遍历段落
- foreach (var para in doc.Paragraphs)
- {
- ReplaceKey(para, data);
- }
- //遍历表格
- var tables = doc.Tables;
- foreach (var table in tables)
- {
- //ReplaceTableKey(table, data, "Data");
- }
-
- foreach (var table in tables)
- {
- foreach (var row in table.Rows)
- {
- foreach (var cell in row.GetTableCells())
- {
- foreach (var para in cell.Paragraphs)
- {
- ReplaceKey(para, data);
- }
- }
- }
- }
-
- FileStream out1 = new FileStream("table.docx", FileMode.Create);
- doc.Write(out1);
- out1.Close();
- return new FileStreamResult(stream, "application/msword")
- {
- FileDownloadName = $"replaced_{DateTime.Now.ToString("yyyyMMddHHmmss")}.docx"
- };
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
- private static void ReplaceKey(XWPFParagraph para, object model)
- {
- string text = para.ParagraphText;
-
- Type t = model.GetType();
- PropertyInfo[] pi = t.GetProperties();
- foreach (PropertyInfo p in pi)
- {
- //$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
- if (text.Contains("$" + p.Name + "$"))
- {
- text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
- }
- }
-
- //var runs = para.Runs;
- //string styleid = para.Style;
- //for (int i = 0; i < runs.Count; i++)
- //{
- // var run = runs[i];
- // text = run.ToString();
- // Type t = model.GetType();
- // PropertyInfo[] pi = t.GetProperties();
- // foreach (PropertyInfo p in pi)
- // {
- // //$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
- // if (text.Contains("$" + p.Name + "$"))
- // {
- // text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
- // }
- // }
- // runs[i].SetText(text, 0);
- //}
- }
-
-
-
-
- ///
- /// 替换表格Key
- ///
- ///
- ///
- ///
-
- private static void ReplaceTableKey(XWPFTable table, IList list, String field)
- {
- List paras = new List();
- // 获取最后一行数据,最后一行设置值
- Int32 iLastRowIndex = 0;
- for (int iIndex = 0; iIndex < table.Rows.Count; iIndex++)
- {
- if (iIndex == table.Rows.Count - 1)
- {
- iLastRowIndex = iIndex;
- foreach (var cell in table.Rows[iIndex].GetTableCells())
- {
- foreach (var para in cell.Paragraphs)
- {
- paras.Add(para);
- }
- }
- }
- }
- // 删除最后一行
- table.RemoveRow(iLastRowIndex);
-
- for (int iIndex = 0; iIndex < list.Count; iIndex++)
- {
- object data = list[iIndex];
- Type t = data.GetType();
- PropertyInfo[] pi = t.GetProperties();
- // 表增加行
- XWPFTableRow m_row = table.CreateRow();
- CT_Row m_NewRow = new CT_Row();
- String text = String.Empty;
- Int32 jIndex = 0;
- paras.ForEach(para =>
- {
- text = para.ParagraphText;
- foreach (PropertyInfo p in pi)
- {
- if (text.Contains("$" + field + "." + p.Name + "$"))
- {
- m_row.GetCell(jIndex).SetText(p.GetValue(data, null).ToString());
- }
- }
- jIndex++;
- });
- m_row = new XWPFTableRow(m_NewRow, table);
- table.AddRow(m_row);
-
- }
- }
-
-
-
-}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
index 8a8f6fa2..a2c79993 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs
@@ -187,7 +187,7 @@ namespace IRaCIS.Application.Services
#endregion
- #region 自动添加IC 到Site 里
+ #region 自动添加CRC 到Site 里
if (await _repository.AnyAsync(t => t.Id == item.UserId && t.UserTypeRole.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator))
{
await _repository.AddAsync(new TrialSiteUser() { TrialId = trialId, SiteId = Guid.Parse("db83e2f5-1f2e-408f-a45b-08d8e1dcace0"), UserId =item.UserId });
@@ -218,10 +218,10 @@ namespace IRaCIS.Application.Services
if (updateTrialUserCommand.IsDeleted)
{
- if (await _repository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
- {
- return ResponseOutput.NotOk("Participant has participated in site maintenance");
- }
+ //if (await _repository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
+ //{
+ // return ResponseOutput.NotOk("Participant has participated in site maintenance");
+ //}
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
{
@@ -253,10 +253,10 @@ namespace IRaCIS.Application.Services
if (trialUser == null) return Null404NotFound(trialUser);
- if (await _repository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
- {
- return ResponseOutput.NotOk("Participant has participated in site maintenance");
- }
+ //if (await _repository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
+ //{
+ // return ResponseOutput.NotOk("Participant has participated in site maintenance");
+ //}
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC && isDelete)
{
diff --git a/Start/Resource/Data/data.sql b/Start/Resource/Data/data.sql
index b132d100..74fb20f2 100644
Binary files a/Start/Resource/Data/data.sql and b/Start/Resource/Data/data.sql differ
diff --git a/Start/Resource/EIImageViewerService.rar b/Start/Resource/EIImageViewerService.rar
index 16c2e47d..1521c1e8 100644
Binary files a/Start/Resource/EIImageViewerService.rar and b/Start/Resource/EIImageViewerService.rar differ
diff --git a/Start/Resource/EIImageViewerWeb.rar b/Start/Resource/EIImageViewerWeb.rar
index b0317a93..129964a7 100644
Binary files a/Start/Resource/EIImageViewerWeb.rar and b/Start/Resource/EIImageViewerWeb.rar differ
diff --git a/Start/Resource/医学影像处理软件用户手册.pdf b/Start/Resource/医学影像处理软件用户手册.pdf
new file mode 100644
index 00000000..65d6cd70
Binary files /dev/null and b/Start/Resource/医学影像处理软件用户手册.pdf differ
diff --git a/UnInstall/Program.cs b/UnInstall/Program.cs
index 43fb8243..f6b43fb6 100644
--- a/UnInstall/Program.cs
+++ b/UnInstall/Program.cs
@@ -1,8 +1,10 @@
// See https://aka.ms/new-console-template for more information
using Newtonsoft.Json.Linq;
+using Serilog;
using System.Data.SqlTypes;
using System.Diagnostics;
+using System.Drawing;
async Task ProcessStandardInputAsync(Process process, string cmd, string workDirectory = "")
{
@@ -30,7 +32,36 @@ void DeleteFolderContents(string path)
foreach (FileInfo file in directory.GetFiles())
{
- file.Delete();
+
+ try
+ {
+ file.Attributes = FileAttributes.Normal;
+ file.Delete();
+ }
+ catch (IOException ex)
+ {
+ // 处理文件被占用的异常
+ MyLog($"File {file.FullName} is being used and cannot be deleted. {ex.Message}");
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+
+ try
+ {
+ File.Delete(file.FullName);
+ }
+ catch (Exception ex2)
+ {
+
+ MyLog($"File {file.FullName} cannot be deleted. {ex2.Message}");
+ }
+
+
+ }
+
+
+
+
}
foreach (DirectoryInfo subDirectory in directory.GetDirectories())
@@ -39,23 +70,40 @@ void DeleteFolderContents(string path)
}
}
+ void MyLog(string message)
+{
+ Console.WriteLine(message);
+ Serilog.Log.Information(message);
+}
+Serilog.Log.Logger = new LoggerConfiguration()
+ .WriteTo.File("logs\\UninstallLog.txt", rollingInterval: RollingInterval.Day)
+ .CreateLogger();
+
+
+
+var startProList = Process.GetProcesses().Where(t => t.ProcessName.Contains("Start")).ToList();
+foreach (var item in startProList)
+{
+ item.Kill();
+}
+
var configFolder = $@"C:\ProgramData\.xingcang\";
var configPath =Path.Combine(configFolder, "config.json") ;
if (!File.Exists(configPath))
{
- Console.WriteLine("当前系统未部署影像系统,无须卸载");
+ MyLog("当前系统未部署影像系统,无须卸载");
Console.ReadLine();
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("");
- Console.WriteLine("警告:卸载EI Image Viewer 服务,会将后台服务、数据库、网站文件以及运行的所有数据记录清除,请慎重操作。在卸载前,请确保数据已经备份。");
- Console.WriteLine(" 您确定要继续卸载该服务吗?(Y/N)");
+ MyLog("");
+ MyLog("警告:卸载EI Image Viewer 服务,会将后台服务、数据库、网站文件以及运行的所有数据记录清除,请慎重操作。在卸载前,请确保数据已经备份。");
+ MyLog(" 您确定要继续卸载该服务吗?(Y/N)");
Console.ResetColor();
string confirm = Console.ReadLine();
@@ -64,7 +112,7 @@ else
// 执行卸载操作
try
{
- Console.WriteLine("开始读取激活信息...");
+ MyLog("开始读取激活信息...");
var appsettingsJson = File.ReadAllText(configPath);
@@ -87,7 +135,7 @@ else
nginxServiceName= jObject["nginxServiceName"]?.ToString(),
nginxServiceEXEPath= jObject["nginxServiceEXEPath"]?.ToString(),
};
- Console.WriteLine("激活信息读取完毕,开始准备卸载...");
+ MyLog("激活信息读取完毕,开始准备卸载...");
@@ -101,14 +149,15 @@ else
process.Start();
- Console.WriteLine("停止并卸载nginx服务...");
+ MyLog("停止并卸载nginx服务...");
await ProcessStandardInputAsync(process, $" {configObj.nginxServiceEXEPath} uninstall ", configObj.nginxStartPath);
await ProcessStandardInputAsync(process, $"sc stop {configObj.nginxServiceName}");
await ProcessStandardInputAsync(process, $"sc delete {configObj.nginxServiceName}");
await Task.Delay(2000);
- var proList = Process.GetProcesses().Where(t => (t.ProcessName.Contains("nginx") || t.ProcessName.Contains("nginxService")) && t.MainModule.FileName.Contains(configObj.nginxStartPath));
+
+ var proList = Process.GetProcesses().Where(t => ((t.ProcessName.Contains("nginx") || t.ProcessName.Contains("nginxService")) && t.MainModule.FileName.Contains(configObj.nginxStartPath))).ToList();
foreach (var item in proList)
{
@@ -117,37 +166,40 @@ else
- Console.WriteLine("停止并卸载后端服务...");
+
+ MyLog("停止并卸载后端服务...");
await ProcessStandardInputAsync(process, $"sc stop {configObj.serviceName}");
await ProcessStandardInputAsync(process, $"sc delete {configObj.serviceName}");
- Console.WriteLine("数据库若被其他进程或者连接正在使用,将会删除失败,您可以卸载完后手动删除遗留的数据库");
- Console.WriteLine("执行删除数据库命令...");
+ MyLog("数据库若被其他进程或者连接正在使用,将会删除失败,您可以卸载完后手动删除遗留的数据库");
+ MyLog("执行删除数据库命令...");
await ProcessStandardInputAsync(process, $@" SQLCMD -S {configObj.server} -U {configObj.user} -P {configObj.password} -Q ""DROP DATABASE {configObj.dbName}"" ");
process.StandardInput.Close();
process.WaitForExit();
- Console.WriteLine("删除部署文件夹下的所有内容...");
+ MyLog("删除部署文件夹下的所有内容...");
DeleteFolderContents(configObj.deployFolder);
DeleteFolderContents(configFolder);
- Console.WriteLine("删除激活信息...");
-
- Console.WriteLine("EI Image Viewer 服务卸载完成。");
- Console.ReadLine();
-
+ MyLog("删除激活信息...");
+ MyLog("EI Image Viewer 服务卸载完成。");
+
}
catch (Exception ex)
{
- Console.WriteLine("程序出错:" + ex.Message);
+ MyLog("程序出错:" + ex.Message);
+ }
+ finally
+ {
+ Console.ReadLine();
}
}
diff --git a/UnInstall/UnInstall.csproj b/UnInstall/UnInstall.csproj
index 7789b8da..8c3d4396 100644
--- a/UnInstall/UnInstall.csproj
+++ b/UnInstall/UnInstall.csproj
@@ -15,6 +15,7 @@
+