fix encoding filename
This commit is contained in:
parent
faa9a059bc
commit
1151cbb42f
@ -18,16 +18,20 @@ namespace PdfScribe
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Calls the Ghostscript API with a collection of arguments to be passed to it
|
/// Calls the Ghostscript API with a collection of arguments to be passed to it
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void CallAPI(string[] args)
|
public static void CallAPI(string[] argv)
|
||||||
{
|
{
|
||||||
// Get a pointer to an instance of the Ghostscript API and run the API with the current arguments
|
// Get a pointer to an instance of the Ghostscript API and run the API with the current arguments
|
||||||
IntPtr gsInstancePtr;
|
IntPtr gsInstancePtr;
|
||||||
lock (resourceLock)
|
lock (resourceLock)
|
||||||
{
|
{
|
||||||
NativeMethods.CreateAPIInstance(out gsInstancePtr, IntPtr.Zero);
|
NativeMethods.CreateAPIInstance(out gsInstancePtr, IntPtr.Zero);
|
||||||
|
IntPtr[] utf8argv = new IntPtr[argv.Length];
|
||||||
|
for (int i = 0; i < utf8argv.Length; i++)
|
||||||
|
utf8argv[i] = NativeMethods.NativeUtf8FromString(argv[i]);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int result = NativeMethods.InitAPI(gsInstancePtr, args.Length, args);
|
NativeMethods.SetEncoding(gsInstancePtr, NativeMethods.GS_ARG_ENCODING_UTF8);
|
||||||
|
int result = NativeMethods.InitAPI(gsInstancePtr, argv.Length, utf8argv);
|
||||||
|
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
{
|
{
|
||||||
@ -36,6 +40,8 @@ namespace PdfScribe
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < utf8argv.Length; i++)
|
||||||
|
Marshal.FreeHGlobal(utf8argv[i]);
|
||||||
Cleanup(gsInstancePtr);
|
Cleanup(gsInstancePtr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace PdfScribe
|
namespace PdfScribe
|
||||||
{
|
{
|
||||||
@ -13,12 +14,18 @@ namespace PdfScribe
|
|||||||
https://github.com/mephraim/ghostscriptsharp
|
https://github.com/mephraim/ghostscriptsharp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
public const int GS_ARG_ENCODING_LOCAL = 0;
|
||||||
|
public const int GS_ARG_ENCODING_UTF8 = 1;
|
||||||
|
|
||||||
#region Hooks into Ghostscript DLL
|
#region Hooks into Ghostscript DLL
|
||||||
[DllImport("gsdll64.dll", EntryPoint = "gsapi_new_instance")]
|
[DllImport("gsdll64.dll", EntryPoint = "gsapi_new_instance")]
|
||||||
internal static extern int CreateAPIInstance(out IntPtr pinstance, IntPtr caller_handle);
|
internal static extern int CreateAPIInstance(out IntPtr pinstance, IntPtr caller_handle);
|
||||||
|
|
||||||
[DllImport("gsdll64.dll", EntryPoint = "gsapi_init_with_args")]
|
[DllImport("gsdll64.dll", EntryPoint = "gsapi_init_with_args")]
|
||||||
internal static extern int InitAPI(IntPtr instance, int argc, string[] argv);
|
internal static extern int InitAPI(IntPtr instance, int argc, IntPtr[] argv);
|
||||||
|
|
||||||
|
[DllImport("gsdll64.dll", EntryPoint = "gsapi_set_arg_encoding")]
|
||||||
|
internal static extern int SetEncoding(IntPtr inst, int encoding);
|
||||||
|
|
||||||
[DllImport("gsdll64.dll", EntryPoint = "gsapi_exit")]
|
[DllImport("gsdll64.dll", EntryPoint = "gsapi_exit")]
|
||||||
internal static extern int ExitAPI(IntPtr instance);
|
internal static extern int ExitAPI(IntPtr instance);
|
||||||
@ -29,5 +36,15 @@ namespace PdfScribe
|
|||||||
|
|
||||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
internal static extern bool SetDllDirectory(string lpPathName);
|
internal static extern bool SetDllDirectory(string lpPathName);
|
||||||
|
|
||||||
|
public static IntPtr NativeUtf8FromString(string managedString)
|
||||||
|
{
|
||||||
|
int len = Encoding.UTF8.GetByteCount(managedString);
|
||||||
|
byte[] buffer = new byte[len + 1]; // null-terminator allocated
|
||||||
|
Encoding.UTF8.GetBytes(managedString, 0, managedString.Length, buffer, 0);
|
||||||
|
IntPtr nativeUtf8 = Marshal.AllocHGlobal(buffer.Length);
|
||||||
|
Marshal.Copy(buffer, 0, nativeUtf8, buffer.Length);
|
||||||
|
return nativeUtf8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>PdfScribe</RootNamespace>
|
<RootNamespace>PdfScribe</RootNamespace>
|
||||||
<AssemblyName>PdfScribe</AssemblyName>
|
<AssemblyName>PdfScribe</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
<TargetFrameworkProfile>
|
<TargetFrameworkProfile>
|
||||||
</TargetFrameworkProfile>
|
</TargetFrameworkProfile>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
@ -87,6 +87,7 @@
|
|||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Web" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
@ -114,6 +115,7 @@
|
|||||||
<DependentUpon>Settings.settings</DependentUpon>
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="RegUtils.cs" />
|
||||||
<Compile Include="SetOutputFilename.cs">
|
<Compile Include="SetOutputFilename.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@ -150,11 +152,11 @@
|
|||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
</Target>
|
</Target>
|
||||||
<Target Name="AfterBuild">
|
<Target Name="AfterBuild">
|
||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
</Project>
|
</Project>
|
@ -2,6 +2,7 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
@ -42,6 +43,7 @@ namespace PdfScribe
|
|||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
//Debugger.Launch();
|
||||||
// Install the global exception handler
|
// Install the global exception handler
|
||||||
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException);
|
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException);
|
||||||
|
|
||||||
@ -66,8 +68,10 @@ namespace PdfScribe
|
|||||||
File.Delete(outputFilename);
|
File.Delete(outputFilename);
|
||||||
// Only set absolute minimum parameters, let the postscript input
|
// Only set absolute minimum parameters, let the postscript input
|
||||||
// dictate as much as possible
|
// dictate as much as possible
|
||||||
String[] ghostScriptArguments = { "-dBATCH", "-dNOPAUSE", "-dSAFER", "-sDEVICE=pdfwrite",
|
outputFilename = outputFilename.Replace("\\\\", "/");
|
||||||
String.Format("-sOutputFile={0}", outputFilename), standardInputFilename,
|
standardInputFilename = standardInputFilename.Replace("\\", "/");
|
||||||
|
string[] ghostScriptArguments = {"gs", "-dBATCH", "-dNOPAUSE", "-dSAFER", "-sDEVICE=pdfwrite",
|
||||||
|
string.Format("-sOutputFile={0}", outputFilename), standardInputFilename,
|
||||||
"-c", @"[/Creator(PdfScribe 1.1.0 (PSCRIPT5)) /DOCINFO pdfmark", "-f"};
|
"-c", @"[/Creator(PdfScribe 1.1.0 (PSCRIPT5)) /DOCINFO pdfmark", "-f"};
|
||||||
|
|
||||||
GhostScript64.CallAPI(ghostScriptArguments);
|
GhostScript64.CallAPI(ghostScriptArguments);
|
||||||
@ -229,23 +233,82 @@ namespace PdfScribe
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void GetPathFormTitle(ref String outputFilename,
|
private static void GetPathFormTitle(ref String outputFilename, string standardInputFilename)
|
||||||
String standardInputFilename)
|
|
||||||
{
|
{
|
||||||
const String titlePrefix = "%%Title: ";
|
string path = RegUtils.GetRegistryValue("Software\\PDF Scribe uBIM_Customization", "OutputFile");
|
||||||
using (var fs = new FileStream(standardInputFilename, FileMode.Open, FileAccess.Read))
|
if (path != "0000")
|
||||||
using (var sr = new StreamReader(fs))
|
|
||||||
{
|
{
|
||||||
string line = String.Empty;
|
var dir = path.Substring(0, path.LastIndexOf("\\") + 1);
|
||||||
while ((line = sr.ReadLine()) != null)
|
var file = path.Substring(path.LastIndexOf("\\") + 1);
|
||||||
|
file = MakeValidFileName(file);
|
||||||
|
outputFilename = dir + file;
|
||||||
|
RegUtils.SetRegistryKey("HKEY_CURRENT_USER", "Software\\PDF Scribe uBIM_Customization", "OutputFile", "0000");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(outputFilename))
|
||||||
|
{
|
||||||
|
const String titlePrefix = "%%Title: ";
|
||||||
|
using (var fs = new FileStream(standardInputFilename, FileMode.Open, FileAccess.Read))
|
||||||
|
using (var sr = new StreamReader(fs))
|
||||||
{
|
{
|
||||||
if (line.StartsWith(titlePrefix))
|
string line = String.Empty;
|
||||||
|
while ((line = sr.ReadLine()) != null)
|
||||||
{
|
{
|
||||||
outputFilename = line.Substring(titlePrefix.Length);
|
if (line.StartsWith(titlePrefix))
|
||||||
break;
|
{
|
||||||
|
var file = line.Substring(titlePrefix.Length);
|
||||||
|
if (file.StartsWith("<"))
|
||||||
|
{
|
||||||
|
file = file.Trim('<', '>');
|
||||||
|
var length = file.Length;
|
||||||
|
var count = file.Length / 2;
|
||||||
|
for (int i = 1; i <= count; i++)
|
||||||
|
{
|
||||||
|
file = file.Insert(length - i * 2, "%");
|
||||||
|
}
|
||||||
|
file = System.Web.HttpUtility.UrlDecode(file, Encoding.GetEncoding("gb2312"));
|
||||||
|
}
|
||||||
|
file = file.Trim('(', ')');
|
||||||
|
if (file.Contains(@"\\"))
|
||||||
|
{
|
||||||
|
file = file.Replace(@"\\", @"//");
|
||||||
|
var oldStr = Regex.Matches(file, @"\\[0-9]{1,3}");
|
||||||
|
if (oldStr.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (Match str in oldStr)
|
||||||
|
{
|
||||||
|
var num = str.Value.Trim('\\');
|
||||||
|
var hex = $"%{Convert.ToInt32(num, 8).ToString("X")}";
|
||||||
|
file = file.Replace(str.Value, hex);
|
||||||
|
}
|
||||||
|
file = System.Web.HttpUtility.UrlDecode(file, Encoding.GetEncoding("gb2312"));
|
||||||
|
}
|
||||||
|
file = file.Replace(@"//", @"\\");
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(Path.GetExtension(file)))
|
||||||
|
{
|
||||||
|
var dir = file.Substring(0, file.LastIndexOf("\\") + 1);
|
||||||
|
file = file.Substring(file.LastIndexOf("\\") + 1);
|
||||||
|
file = MakeValidFileName(file);
|
||||||
|
outputFilename = dir + file;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string MakeValidFileName(string outputFilename, char replaceChar = '_')
|
||||||
|
{
|
||||||
|
var invalidChars = System.IO.Path.GetInvalidFileNameChars();
|
||||||
|
foreach (var invalidChar in invalidChars)
|
||||||
|
{
|
||||||
|
outputFilename = outputFilename.Replace(invalidChar, replaceChar);
|
||||||
|
}
|
||||||
|
|
||||||
|
return outputFilename;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String GetOutputFilename()
|
private static String GetOutputFilename()
|
||||||
|
206
PdfScribe/RegUtils.cs
Normal file
206
PdfScribe/RegUtils.cs
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
|
namespace PdfScribe
|
||||||
|
{
|
||||||
|
public static class RegUtils
|
||||||
|
{
|
||||||
|
static readonly IntPtr HKEY_CLASSES_ROOT = new IntPtr(unchecked((int)0x80000000));
|
||||||
|
static readonly IntPtr HKEY_CURRENT_USER = new IntPtr(unchecked((int)0x80000001));
|
||||||
|
static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(unchecked((int)0x80000002));
|
||||||
|
static readonly IntPtr HKEY_USERS = new IntPtr(unchecked((int)0x80000003));
|
||||||
|
static readonly IntPtr HKEY_PERFORMANCE_DATA = new IntPtr(unchecked((int)0x80000004));
|
||||||
|
static readonly IntPtr HKEY_CURRENT_CONFIG = new IntPtr(unchecked((int)0x80000005));
|
||||||
|
static readonly IntPtr HKEY_DYN_DATA = new IntPtr(unchecked((int)0x80000006));
|
||||||
|
|
||||||
|
// 获取操作Key值句柄
|
||||||
|
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern int RegOpenKeyEx(IntPtr hKey, string lpSubKey, uint ulOptions, int samDesired, out IntPtr phkResult);
|
||||||
|
|
||||||
|
//创建或打开Key值
|
||||||
|
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern int RegCreateKeyEx(IntPtr hKey, string lpSubKey, int reserved, string type, int dwOptions, int REGSAM, IntPtr lpSecurityAttributes, out IntPtr phkResult,
|
||||||
|
out int lpdwDisposition);
|
||||||
|
|
||||||
|
//关闭注册表转向(禁用特定项的注册表反射)
|
||||||
|
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern int RegDisableReflectionKey(IntPtr hKey);
|
||||||
|
|
||||||
|
//使能注册表转向(开启特定项的注册表反射)
|
||||||
|
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern int RegEnableReflectionKey(IntPtr hKey);
|
||||||
|
|
||||||
|
//获取Key值(即:Key值句柄所标志的Key对象的值)
|
||||||
|
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern int RegQueryValueEx(IntPtr hKey, string lpValueName, int lpReserved, out uint lpType, StringBuilder lpData, ref uint lpcbData);
|
||||||
|
|
||||||
|
//设置Key值
|
||||||
|
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern int RegSetValueEx(IntPtr hKey, string lpValueName, uint unReserved, uint unType, byte[] lpData, uint dataCount);
|
||||||
|
|
||||||
|
//关闭Key值
|
||||||
|
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern int RegCloseKey(IntPtr hKey);
|
||||||
|
|
||||||
|
public static IntPtr TransferKeyName(string keyName)
|
||||||
|
{
|
||||||
|
IntPtr ret = IntPtr.Zero;
|
||||||
|
switch (keyName)
|
||||||
|
{
|
||||||
|
case "HKEY_CLASSES_ROOT":
|
||||||
|
ret = HKEY_CLASSES_ROOT;
|
||||||
|
break;
|
||||||
|
case "HKEY_CURRENT_USER":
|
||||||
|
ret = HKEY_CURRENT_USER;
|
||||||
|
break;
|
||||||
|
case "HKEY_LOCAL_MACHINE":
|
||||||
|
ret = HKEY_LOCAL_MACHINE;
|
||||||
|
break;
|
||||||
|
case "HKEY_USERS":
|
||||||
|
ret = HKEY_USERS;
|
||||||
|
break;
|
||||||
|
case "HKEY_PERFORMANCE_DATA":
|
||||||
|
ret = HKEY_PERFORMANCE_DATA;
|
||||||
|
break;
|
||||||
|
case "HKEY_CURRENT_CONFIG":
|
||||||
|
ret = HKEY_CURRENT_CONFIG;
|
||||||
|
break;
|
||||||
|
case "HKEY_DYN_DATA":
|
||||||
|
ret = HKEY_DYN_DATA;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = HKEY_LOCAL_MACHINE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置64位注册表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="subKey"></param>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int Set64BitRegistryKey(string key, string subKey, string name, string value)
|
||||||
|
{
|
||||||
|
int STANDARD_RIGHTS_ALL = 0x001F0000;
|
||||||
|
int KEY_QUERY_VALUE = 0x0001;
|
||||||
|
int KEY_SET_VALUE = 0x0002;
|
||||||
|
int KEY_CREATE_SUB_KEY = 0x0004;
|
||||||
|
int KEY_ENUMERATE_SUB_KEYS = 0x0008;
|
||||||
|
int KEY_NOTIFY = 0x0010;
|
||||||
|
int KEY_CREATE_LINK = 0x0020;
|
||||||
|
int SYNCHRONIZE = 0x00100000;
|
||||||
|
int KEY_WOW64_64KEY = 0x0100;
|
||||||
|
int REG_OPTION_NON_VOLATILE = 0x00000000;
|
||||||
|
int KEY_ALL_ACCESS = (STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS
|
||||||
|
| KEY_NOTIFY | KEY_CREATE_LINK) & ~SYNCHRONIZE;
|
||||||
|
|
||||||
|
int ret = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//将Windows注册表主键名转化成为不带正负号的整形句柄(与平台是32或者64位有关)
|
||||||
|
IntPtr hKey = TransferKeyName(key);
|
||||||
|
|
||||||
|
//声明将要获取Key值的句柄
|
||||||
|
IntPtr pHKey = IntPtr.Zero;
|
||||||
|
|
||||||
|
//获得操作Key值的句柄
|
||||||
|
int lpdwDisposition = 0;
|
||||||
|
ret = RegCreateKeyEx(hKey, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_64KEY, IntPtr.Zero, out pHKey, out lpdwDisposition);
|
||||||
|
if (ret != 0)
|
||||||
|
{
|
||||||
|
//Log2.Log(string.Format("Unable to create key {0} - {1}: {2}!", key, subKey, ret));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
//关闭注册表转向(禁止特定项的注册表反射)
|
||||||
|
RegDisableReflectionKey(pHKey);
|
||||||
|
|
||||||
|
//设置访问的Key值
|
||||||
|
uint REG_SZ = 1;
|
||||||
|
byte[] data = Encoding.Unicode.GetBytes(value);
|
||||||
|
|
||||||
|
RegSetValueEx(pHKey, name, 0, REG_SZ, data, (uint)data.Length);
|
||||||
|
|
||||||
|
//打开注册表转向(开启特定项的注册表反射)
|
||||||
|
RegEnableReflectionKey(pHKey);
|
||||||
|
|
||||||
|
RegCloseKey(pHKey);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//Log2.Log(ex.ToString());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetRegistryKey(string key, string subKey, string name, string value)
|
||||||
|
{
|
||||||
|
//Log2.Log("SetRegistryKey start.");
|
||||||
|
if (IntPtr.Size == 8)
|
||||||
|
{
|
||||||
|
// 写SOFTWARE\Huawei\VirtualDesktopAgent,需要关闭注册表重定向,再写64位路径的注册表
|
||||||
|
int ret = Set64BitRegistryKey(key, subKey, name, value);
|
||||||
|
if (ret != 0)
|
||||||
|
{
|
||||||
|
//Log2.Log(string.Format("Failed to write Reg {0}\\{1}\\{2},return {3}", key, subKey, name, ret));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(key + "\\" + subKey, name, value);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.ToString());
|
||||||
|
//Log2.Log(ex.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
//Log2.Log("SetRegistryKey exit.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetRegistryValue(string path, string key)
|
||||||
|
{
|
||||||
|
RegistryKey regkey = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
regkey = Registry.CurrentUser.OpenSubKey(path);
|
||||||
|
if (regkey == null)
|
||||||
|
{
|
||||||
|
//Log2.Log("Cannot find Registry path:" + path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
object val = regkey.GetValue(key);
|
||||||
|
if (val == null)
|
||||||
|
{
|
||||||
|
//Log2.Log("Cannot find Registry key:" + key);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val.ToString();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//Log2.Log(ex.ToString());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (regkey != null)
|
||||||
|
{
|
||||||
|
regkey.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,7 +10,7 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>PdfScribeCore</RootNamespace>
|
<RootNamespace>PdfScribeCore</RootNamespace>
|
||||||
<AssemblyName>PdfScribeCore</AssemblyName>
|
<AssemblyName>PdfScribeCore</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
<TargetFrameworkProfile>
|
<TargetFrameworkProfile>
|
||||||
</TargetFrameworkProfile>
|
</TargetFrameworkProfile>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
|
@ -38,7 +38,7 @@ namespace PdfScribeCore
|
|||||||
private readonly String logEventSourceNameDefault = "PdfScribeCore";
|
private readonly String logEventSourceNameDefault = "PdfScribeCore";
|
||||||
|
|
||||||
const string ENVIRONMENT_64 = "Windows x64";
|
const string ENVIRONMENT_64 = "Windows x64";
|
||||||
const string PRINTERNAME = "PDF Scribe";
|
const string PRINTERNAME = "PDF Scribe uBIM_Customization";
|
||||||
const string DRIVERNAME = "PDF Scribe Virtual Printer";
|
const string DRIVERNAME = "PDF Scribe Virtual Printer";
|
||||||
const string HARDWAREID = "PDFScribe_Driver0101";
|
const string HARDWAREID = "PDFScribe_Driver0101";
|
||||||
const string PORTMONITOR = "PDFSCRIBE";
|
const string PORTMONITOR = "PDFSCRIBE";
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<ProductVersion>3.7</ProductVersion>
|
<ProductVersion>3.7</ProductVersion>
|
||||||
<ProjectGuid>{3c255536-a7f1-4913-9c7f-966dffee01bc}</ProjectGuid>
|
<ProjectGuid>{3c255536-a7f1-4913-9c7f-966dffee01bc}</ProjectGuid>
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
<OutputName>PdfScribeInstall_1.1</OutputName>
|
<OutputName>PdfScribeInstall_1.1.2.413</OutputName>
|
||||||
<OutputType>Package</OutputType>
|
<OutputType>Package</OutputType>
|
||||||
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
|
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
|
||||||
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
|
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx ="http://schemas.microsoft.com/wix/NetFxExtension">
|
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx ="http://schemas.microsoft.com/wix/NetFxExtension">
|
||||||
<Product Id="{8D75C14C-20BD-439D-826C-C399C13DEE31}" Name="PDF Scribe" Language="1033" Version="1.1.0" Manufacturer="Black Telescope Workshop" UpgradeCode="409ff0d1-1c3a-4f8d-8a5a-350705977809">
|
<Product Id="{4618E59F-753E-4DF0-8F14-6CD963C03EEA}" Name="PDF Scribe" Language="1033" Version="1.1.2.413" Manufacturer="Black Telescope Workshop" UpgradeCode="409ff0d1-1c3a-4f8d-8a5a-350705977809">
|
||||||
<Package InstallerVersion="500" Compressed="yes" InstallScope="perMachine"
|
<Package InstallerVersion="500" Compressed="yes" InstallScope="perMachine"
|
||||||
Platform="x64"
|
Platform="x64"
|
||||||
InstallPrivileges="elevated"
|
InstallPrivileges="elevated"
|
||||||
Description="PDF Scribe Virtual Printer"
|
Description="PDF Scribe Virtual Printer"
|
||||||
Comments="PDF Scribe Virtual Printer 1.1.0 installation package"
|
Comments="PDF Scribe Virtual Printer 1.1.2 installation package"
|
||||||
Id="*" />
|
Id="*" />
|
||||||
|
|
||||||
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed."
|
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed."
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>PdfScribeInstallCustomAction</RootNamespace>
|
<RootNamespace>PdfScribeInstallCustomAction</RootNamespace>
|
||||||
<AssemblyName>PdfScribeInstallCustomAction</AssemblyName>
|
<AssemblyName>PdfScribeInstallCustomAction</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<WixCATargetsPath Condition=" '$(WixCATargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets</WixCATargetsPath>
|
<WixCATargetsPath Condition=" '$(WixCATargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets</WixCATargetsPath>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
|
Loading…
Reference in New Issue
Block a user