'commit'
This commit is contained in:
344
WordAddIn/WpsInstaller/Program.cs
Normal file
344
WordAddIn/WpsInstaller/Program.cs
Normal file
@@ -0,0 +1,344 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using Microsoft.Win32;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
|
||||
namespace WpsInstaller
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("========================================");
|
||||
Console.WriteLine(" WPS Add-in Installer Tool");
|
||||
Console.WriteLine("========================================");
|
||||
Console.WriteLine();
|
||||
|
||||
string mode = "wps"; // default
|
||||
if (args.Length > 0)
|
||||
{
|
||||
mode = args[0].ToLower();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 1. Locate WordAddIn.dll and WordAddIn.vsto
|
||||
string currentDir = AppDomain.CurrentDomain.BaseDirectory;
|
||||
string dllPath = Path.Combine(currentDir, "WordAddIn.dll");
|
||||
string vstoPath = Path.Combine(currentDir, "WordAddIn.vsto");
|
||||
|
||||
if (!File.Exists(dllPath))
|
||||
{
|
||||
// Fallback for Dev scenario
|
||||
string devPathDll = Path.GetFullPath(Path.Combine(currentDir, @"..\..\..\WordAddIn\bin\Debug\WordAddIn.dll"));
|
||||
if (!File.Exists(devPathDll))
|
||||
{
|
||||
devPathDll = Path.GetFullPath(Path.Combine(currentDir, @"..\..\..\WordAddIn\bin\Release\WordAddIn.dll"));
|
||||
}
|
||||
|
||||
if (File.Exists(devPathDll))
|
||||
{
|
||||
dllPath = devPathDll;
|
||||
vstoPath = Path.ChangeExtension(dllPath, ".vsto");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Error: Could not find WordAddIn.dll.");
|
||||
Pause();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine("Found DLL: " + dllPath);
|
||||
|
||||
if (mode == "word")
|
||||
{
|
||||
Console.WriteLine("Mode: Switch to MS Word (VSTO)");
|
||||
// 1. Clean WPS Keys
|
||||
CleanupWpsKeys();
|
||||
|
||||
// 1.5 Clear ClickOnce cache to avoid upgrade conflicts
|
||||
Console.WriteLine("Clearing ClickOnce cache to avoid upgrade conflicts...");
|
||||
ClearClickOnceCache();
|
||||
|
||||
// 2. Register VSTO
|
||||
if (RegisterVsto(vstoPath))
|
||||
{
|
||||
Console.WriteLine(" [OK] VSTO registered successfully.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(" [FAIL] Failed to register VSTO.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Mode: Switch to WPS Office");
|
||||
// 1. Register Assembly (COM Registration)
|
||||
Console.WriteLine("Registering Assembly for COM Interop...");
|
||||
if (RegisterAssembly(dllPath))
|
||||
{
|
||||
Console.WriteLine(" [OK] Assembly registered successfully.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(" [FAIL] Failed to register assembly.");
|
||||
Pause();
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Register for WPS (Registry Keys)
|
||||
Console.WriteLine("Configuring WPS Registry Keys...");
|
||||
if (RegisterForWPS())
|
||||
{
|
||||
Console.WriteLine(" [OK] WPS Registry keys configured successfully.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(" [FAIL] Failed to configure WPS registry keys.");
|
||||
Pause();
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. Cleanup conflicting VSTO registration
|
||||
Console.WriteLine("Checking for conflicting VSTO registrations...");
|
||||
CleanupVstoKeys();
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("========================================");
|
||||
Console.WriteLine(" Operation Completed Successfully!");
|
||||
Console.WriteLine("========================================");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("An unexpected error occurred: " + ex.Message);
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
}
|
||||
|
||||
Pause();
|
||||
}
|
||||
|
||||
static void Pause()
|
||||
{
|
||||
Console.WriteLine("\nPress any key to exit...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void ClearClickOnceCache()
|
||||
{
|
||||
try
|
||||
{
|
||||
string localApp = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
|
||||
string cachePath = System.IO.Path.Combine(localApp, "Apps", "2.0");
|
||||
if (Directory.Exists(cachePath))
|
||||
{
|
||||
Directory.Delete(cachePath, true);
|
||||
Console.WriteLine(" [OK] Cleared ClickOnce cache at " + cachePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(" ClickOnce cache not found, skipping.");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(" Warning: Failed to clear ClickOnce cache: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static bool RegisterVsto(string vstoPath)
|
||||
{
|
||||
if (!File.Exists(vstoPath))
|
||||
{
|
||||
Console.WriteLine(" Error: .vsto file not found at " + vstoPath);
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Register via Registry for Development/Local use
|
||||
// HKCU\Software\Microsoft\Office\Word\Addins\WordAddIn
|
||||
string keyPath = @"Software\Microsoft\Office\Word\Addins\WordAddIn";
|
||||
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(keyPath))
|
||||
{
|
||||
if (key == null) return false;
|
||||
|
||||
key.SetValue("Description", "WordAddIn", RegistryValueKind.String);
|
||||
key.SetValue("FriendlyName", "WordAddIn", RegistryValueKind.String);
|
||||
key.SetValue("LoadBehavior", 3, RegistryValueKind.DWord);
|
||||
// Point to vsto file with |vstolocal to indicate local file
|
||||
key.SetValue("Manifest", vstoPath + "|vstolocal", RegistryValueKind.String);
|
||||
|
||||
Console.WriteLine(" Created Key: HKCU\\" + keyPath);
|
||||
Console.WriteLine(" Manifest: " + vstoPath + "|vstolocal");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(" Error registering VSTO: " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void CleanupWpsKeys()
|
||||
{
|
||||
try
|
||||
{
|
||||
string keyPath = @"Software\Kingsoft\Office\Word\Addins\WordAddIn.WpsAddIn";
|
||||
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyPath, true))
|
||||
{
|
||||
if (key != null)
|
||||
{
|
||||
Console.WriteLine(" Found WPS key. Deleting...");
|
||||
Registry.CurrentUser.DeleteSubKeyTree(keyPath);
|
||||
Console.WriteLine(" [OK] WPS key deleted.");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(" Warning: Failed to cleanup WPS keys: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static bool RegisterAssembly(string assemblyPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Use RegistrationServices to register the assembly
|
||||
// This is equivalent to regasm /codebase
|
||||
// Note: This requires the assembly to be strong-named if registered in GAC,
|
||||
// but for simple codebase registration, it might work if run as Admin.
|
||||
|
||||
// However, standard RegistrationServices doesn't easily support /codebase option programmatically
|
||||
// without some caveats.
|
||||
// The most robust way for a utility is often to shell out to RegAsm.exe if available,
|
||||
// OR use RegistrationServices.RegisterAssembly.
|
||||
|
||||
// Let's try RegistrationServices first.
|
||||
RegistrationServices regService = new RegistrationServices();
|
||||
Assembly asm = Assembly.LoadFrom(assemblyPath);
|
||||
|
||||
// RegisterAssembly adds entries to HKCR\CLSID\{GUID}
|
||||
// We need to set the CodeBase registry key manually if not in GAC,
|
||||
// or ensure RegistrationServices does it.
|
||||
// Actually, RegistrationServices.RegisterAssembly does NOT set the CodeBase by default.
|
||||
// It works like RegAsm without /codebase.
|
||||
|
||||
// So calling RegAsm.exe via process is safer to ensure /codebase behavior.
|
||||
string regAsmPath = GetRegAsmPath();
|
||||
if (string.IsNullOrEmpty(regAsmPath))
|
||||
{
|
||||
Console.WriteLine(" Warning: Could not find RegAsm.exe. Attempting manual registration...");
|
||||
return ManualRegister(asm, assemblyPath);
|
||||
}
|
||||
|
||||
string args = string.Format("\"{0}\" /codebase /tlb", assemblyPath);
|
||||
ProcessStartInfo psi = new ProcessStartInfo(regAsmPath, args);
|
||||
psi.UseShellExecute = false;
|
||||
psi.RedirectStandardOutput = true;
|
||||
psi.CreateNoWindow = true;
|
||||
|
||||
Console.WriteLine(string.Format(" Executing: {0} {1}", psi.FileName, psi.Arguments));
|
||||
|
||||
using (Process p = Process.Start(psi))
|
||||
{
|
||||
string output = p.StandardOutput.ReadToEnd();
|
||||
p.WaitForExit();
|
||||
Console.WriteLine(output);
|
||||
return p.ExitCode == 0;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(" Error registering assembly: " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static bool ManualRegister(Assembly asm, string assemblyPath)
|
||||
{
|
||||
// Fallback: This is complex to do fully manually for all COM types.
|
||||
// If RegAsm is missing, we might be in trouble.
|
||||
// But usually on a machine with .NET Framework (needed to run this app), RegAsm is present.
|
||||
return false;
|
||||
}
|
||||
|
||||
static string GetRegAsmPath()
|
||||
{
|
||||
// Usually in C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
|
||||
// or Framework64
|
||||
string windir = Environment.GetEnvironmentVariable("windir");
|
||||
string fxDir = Path.Combine(windir, @"Microsoft.NET\Framework\v4.0.30319");
|
||||
// Check for 64 bit OS and prefer Framework64 if this process is 64 bit,
|
||||
// BUT WordAddIn is likely AnyCPU.
|
||||
// If Word/WPS is 32-bit, we need 32-bit RegAsm. If 64-bit, we need 64-bit RegAsm.
|
||||
// Ideally register both.
|
||||
|
||||
// For safety, let's try to find the one matching the current process architecture,
|
||||
// or just use the 32-bit one as it is most common for Office.
|
||||
|
||||
string regAsm = Path.Combine(fxDir, "RegAsm.exe");
|
||||
if (File.Exists(regAsm)) return regAsm;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
static bool RegisterForWPS()
|
||||
{
|
||||
try
|
||||
{
|
||||
string keyPath = @"Software\Kingsoft\Office\Word\Addins\WordAddIn.WpsAddIn";
|
||||
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(keyPath))
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
Console.WriteLine(" Error: Could not create registry key HKCU\\" + keyPath);
|
||||
return false;
|
||||
}
|
||||
|
||||
key.SetValue("LoadBehavior", 3, RegistryValueKind.DWord);
|
||||
key.SetValue("FriendlyName", "AI Word Assistant for WPS", RegistryValueKind.String);
|
||||
key.SetValue("Description", "AI Assistant", RegistryValueKind.String);
|
||||
key.SetValue("CommandLineSafe", 0, RegistryValueKind.DWord);
|
||||
|
||||
Console.WriteLine(" Created Key: HKCU\\" + keyPath);
|
||||
Console.WriteLine(" Set LoadBehavior = 3");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(" Error writing WPS registry keys: " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void CleanupVstoKeys()
|
||||
{
|
||||
try
|
||||
{
|
||||
// VSTO adds keys in HKCU\Software\Microsoft\Office\Word\Addins\WordAddIn
|
||||
string vstoKeyPath = @"Software\Microsoft\Office\Word\Addins\WordAddIn";
|
||||
|
||||
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(vstoKeyPath, true))
|
||||
{
|
||||
if (key != null)
|
||||
{
|
||||
Console.WriteLine(" Found VSTO key in HKCU\\" + vstoKeyPath + ". Deleting to avoid conflicts...");
|
||||
Registry.CurrentUser.DeleteSubKeyTree(vstoKeyPath);
|
||||
Console.WriteLine(" [OK] VSTO key deleted.");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(" Warning: Failed to cleanup VSTO keys: " + ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
36
WordAddIn/WpsInstaller/Properties/AssemblyInfo.cs
Normal file
36
WordAddIn/WpsInstaller/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("WpsInstaller")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("WpsInstaller")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("a1b2c3d4-e5f6-4789-0011-223344556677")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
58
WordAddIn/WpsInstaller/WpsInstaller.csproj
Normal file
58
WordAddIn/WpsInstaller/WpsInstaller.csproj
Normal file
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{A1B2C3D4-E5F6-4789-0011-223344556677}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>WpsInstaller</RootNamespace>
|
||||
<AssemblyName>WpsInstaller</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.manifest" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
11
WordAddIn/WpsInstaller/app.manifest
Normal file
11
WordAddIn/WpsInstaller/app.manifest
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<assemblyIdentity version="1.0.0.0" name="WpsInstaller.app"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
</assembly>
|
||||
BIN
WordAddIn/WpsInstaller/bin/Debug/WpsInstaller.exe
Normal file
BIN
WordAddIn/WpsInstaller/bin/Debug/WpsInstaller.exe
Normal file
Binary file not shown.
BIN
WordAddIn/WpsInstaller/bin/Debug/WpsInstaller.pdb
Normal file
BIN
WordAddIn/WpsInstaller/bin/Debug/WpsInstaller.pdb
Normal file
Binary file not shown.
BIN
WordAddIn/WpsInstaller/bin/Release/WpsInstaller.exe
Normal file
BIN
WordAddIn/WpsInstaller/bin/Release/WpsInstaller.exe
Normal file
Binary file not shown.
BIN
WordAddIn/WpsInstaller/bin/Release/WpsInstaller.pdb
Normal file
BIN
WordAddIn/WpsInstaller/bin/Release/WpsInstaller.pdb
Normal file
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
|
||||
Binary file not shown.
@@ -0,0 +1,5 @@
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\bin\Debug\WpsInstaller.exe
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\bin\Debug\WpsInstaller.pdb
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\obj\Debug\WpsInstaller.exe
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\obj\Debug\WpsInstaller.pdb
|
||||
d:\dsWork\aiData\WordAddIn\WpsInstaller\obj\Debug\WpsInstaller.csprojResolveAssemblyReference.cache
|
||||
Binary file not shown.
BIN
WordAddIn/WpsInstaller/obj/Debug/WpsInstaller.exe
Normal file
BIN
WordAddIn/WpsInstaller/obj/Debug/WpsInstaller.exe
Normal file
Binary file not shown.
BIN
WordAddIn/WpsInstaller/obj/Debug/WpsInstaller.pdb
Normal file
BIN
WordAddIn/WpsInstaller/obj/Debug/WpsInstaller.pdb
Normal file
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
979fc59c1f2afcc3443738cd70ff09bf60f7ecb8fbff0eec3eb8b752a83b3e04
|
||||
@@ -0,0 +1,6 @@
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\bin\Release\WpsInstaller.exe
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\bin\Release\WpsInstaller.pdb
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\obj\Release\WpsInstaller.csproj.AssemblyReference.cache
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\obj\Release\WpsInstaller.csproj.CoreCompileInputs.cache
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\obj\Release\WpsInstaller.exe
|
||||
D:\dsWork\aiData\WordAddIn\WpsInstaller\obj\Release\WpsInstaller.pdb
|
||||
BIN
WordAddIn/WpsInstaller/obj/Release/WpsInstaller.exe
Normal file
BIN
WordAddIn/WpsInstaller/obj/Release/WpsInstaller.exe
Normal file
Binary file not shown.
BIN
WordAddIn/WpsInstaller/obj/Release/WpsInstaller.pdb
Normal file
BIN
WordAddIn/WpsInstaller/obj/Release/WpsInstaller.pdb
Normal file
Binary file not shown.
Reference in New Issue
Block a user