我在我的代码中使用.net主要互操作性程序集。 但是,应用程序可以在没有安装.net PIA for Excel的机器上运行。 如果没有安装,我想给出错误消息
即使我正在检查GAC,看看是否安装了PIA,只有当它存在时我才使用Microsoft.Office.Interop.Excel相关代码。我收到了一个错误。
我的问题是 - 我收到的错误是 - 未处理的异常 - 无法找到无法加载文件或程序集Microsoft.Office.Interop.Excel
任何解决方案?
提前致谢!
答案 0 :(得分:1)
我已经使用这个Building Block在may NHunspell包装器中加载hunspell的x86 / x64版本。也许它是你自己的动态加载器的一个很好的起点:
// Initialze the dynamic marshall Infrastructure to call the 32Bit (x86) or the 64Bit (x64) Dll respectively
SYSTEM_INFO info = new SYSTEM_INFO();
GetSystemInfo( ref info );
// Load the correct DLL according to the processor architecture
switch( info.wProcessorArchitecture )
{
case PROCESSOR_ARCHITECTURE.Intel:
string pathx86 = AppDomain.CurrentDomain.BaseDirectory;
if (!pathx86.EndsWith("\\"))
pathx86 += "\\";
pathx86 += Resources.HunspellX86DllName;
dllHandle = LoadLibrary(pathx86);
if (dllHandle == IntPtr.Zero)
throw new DllNotFoundException(string.Format(Resources.HunspellX86DllNotFoundMessage, pathx86));
break;
case PROCESSOR_ARCHITECTURE.Amd64:
string pathx64 = AppDomain.CurrentDomain.BaseDirectory;
if (!pathx64.EndsWith("\\"))
pathx64 += "\\";
pathx64 += Resources.HunspellX64DllName;
dllHandle = LoadLibrary(pathx64);
if (dllHandle == IntPtr.Zero)
throw new DllNotFoundException(string.Format(Resources.HunspellX64DllNotFoundMessage, pathx64));
break;
查看此委托声明:
internal delegate bool HunspellSpellDelegate(IntPtr handle, [MarshalAs(UnmanagedType.LPWStr)] string word);
以及如何将库函数绑定到它
HunspellSpell = (HunspellSpellDelegate)GetDelegate("HunspellSpell", typeof(HunspellSpellDelegate));
我认为这对你也有用,但你必须声明完整的互操作代码。您可以查看Nhunspell代码以获得此技术的工作样本:
答案 1 :(得分:0)
我猜System.Type.GetTypeFromProgID(“Excel.Application”,true);如果Excel不存在,方法将抛出异常。您可以使用try catch块并验证。
答案 2 :(得分:0)
您不应对Excel.Interop库进行静态引用。而不是这样,您应该在GAC中查找它,并在运行时加载它。它相当复杂,并且没有托管API来执行此操作(默认情况下)。
尝试使用此功能:fusion.dll API wrapper