就像乔恩指出的那样,问题是从 windows8 开始,solidworks 无论如何都使用 OXPS 格式。更改组策略中的默认格式适用于其他应用程序,但 Solidworks 不在乎。所以我最终使用了微软迄今为止提供的唯一工具来处理这种情况。哪个是Windows 更新包附带的转换器应用程序。安装后,可以在此处找到转换应用程序:C:\Program Files (x86)\Windows Kits\8.0\bin
有一个 x86 版本和一个 x64 版本。
这是控制台中的一个使用示例。
因此,在我的应用程序旁边添加了转换器应用程序,并在我的应用程序中静默启动转换器。这是一种显示我是如何做到的方法。如有必要,该方法将给定文件转换为 XPS 格式。但结果转换必须是另一个文件,因为该工具无法覆盖它正在转换的文件。
private string EnsureFileIsUnderXPSFormat(string fileName)
{
string retValue = fileName;
string convertedFileName = System.IO.Path.GetDirectoryName(fileName).TrimEnd(System.IO.Path.DirectorySeparatorChar) + System.IO.Path.DirectorySeparatorChar + System.IO.Path.GetFileNameWithoutExtension(fileName) + "_converted" + System.IO.Path.GetExtension(fileName);
Version win8version = new Version(6, 2, 9200, 0);
if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version >= win8version || true)
{
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.Arguments = "/XPS /InputFile=" + fileName + " /OutputFile=" + convertedFileName;
string applicationFolderPath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd(System.IO.Path.DirectorySeparatorChar) + System.IO.Path.DirectorySeparatorChar;
startInfo.FileName = applicationFolderPath + "xpsconverter.exe";
//if (Environment.Is64BitOperatingSystem)
// startInfo.FileName = @"C:\Users\maxiveil\Desktop\testConversion\xpsconverter.exe";
//else
// startInfo.FileName = @"C:\Users\maxiveil\Desktop\testConversion\xpsconverter.exe";
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.CreateNoWindow = true;
using (System.Diagnostics.Process processus = System.Diagnostics.Process.Start(startInfo))
{
processus.WaitForExit();
if (processus.ExitCode != 0)
{
throw new Exception("Failed to convert OXPS file(" + fileName + ") to XPS format. Error code : " + processus.ExitCode.ToString());
}
}
retValue = convertedFileName;
}
return retValue;
}
注意:转换器应用程序不关心您是否尝试将 XPS 格式文件转换为 XPS 格式文件。所以“windows8 if”是可选的。