我有一个情况,我有一个在.Net C#中编写的Windows桌面应用程序,必须在Windows 7和Windows XP上重命名快捷方式。 我已经在Windows 7上运行它,但在XP上失败了。
在XP上安装了.Net 4.0客户端配置文件和扩展,并且应用程序的所有其他部分都在XP上运行。该项目引用Interop.Shell32(通过COM互操作而不是pinvoke实现的Microsoft Shell Controls and Automation),代码如下:
以下内容适用于Win7,但不适用于XP。Shell32.dll有以下版本:
Win7 Shell32.dll版本为6.1.7601 WinXP Shell32.dll版本为6.00.29.6242
当我在对象浏览器中查看XP shell32dll时,相同的对象存在,因此应该有功能(除非我没有看到重要的东西)。
我的项目设置为在两台机器上都构建为x86平台。对于参考文献,我已经尝试将Interop类型嵌入为True,并将复制本地设置为False。
我有一个msi安装程序,但是在目标XP机器上需要做些什么吗?并且是否应该复制本地?您有关于正确使其工作的任何想法吗?
我在该XP机器上运行代码,并从事件查看器中收到以下信息:
框架版本:v4.0.30319 描述:由于未处理的异常,进程被终止。 异常信息:System.InvalidCastException
参考= True的Interop类型嵌入:此错误的堆栈跟踪如下: 无法将类型为“System.__ComObject”的COM对象强制转换为接口类型“Shell32.Shell”。此操作失败,因为针对IID为'{866738B9-6CF2-4DE8-8767-F794EBE74F4E}'的接口的COM组件的QueryInterface调用失败,原因是出现以下错误:不支持此接口(来自HRESULT的异常:0x80004002(E_NOINTERFACE))。
参考= False的Interop类型嵌入:此错误的堆栈跟踪如下: 框架版本:v4.0.30319 描述:由于未处理的异常,进程被终止。 异常信息:System.IO.FileNotFoundException
在XP上安装了.Net 4.0客户端配置文件和扩展,并且应用程序的所有其他部分都在XP上运行。该项目引用Interop.Shell32(通过COM互操作而不是pinvoke实现的Microsoft Shell Controls and Automation),代码如下:
var shl = new Shell32.Shell();
argStrLnkPath = System.IO.Path.GetFullPath(argStrLnkPath);
var dir = shl.NameSpace(System.IO.Path.GetDirectoryName(argStrLnkPath));
var itm = dir.Items().Item(System.IO.Path.GetFileName(argStrLnkPath));
itm.Name = "My Shortcut Name";
以下内容适用于Win7,但不适用于XP。Shell32.dll有以下版本:
Win7 Shell32.dll版本为6.1.7601 WinXP Shell32.dll版本为6.00.29.6242
当我在对象浏览器中查看XP shell32dll时,相同的对象存在,因此应该有功能(除非我没有看到重要的东西)。
我的项目设置为在两台机器上都构建为x86平台。对于参考文献,我已经尝试将Interop类型嵌入为True,并将复制本地设置为False。
我有一个msi安装程序,但是在目标XP机器上需要做些什么吗?并且是否应该复制本地?您有关于正确使其工作的任何想法吗?
我在该XP机器上运行代码,并从事件查看器中收到以下信息:
框架版本:v4.0.30319 描述:由于未处理的异常,进程被终止。 异常信息:System.InvalidCastException
参考= True的Interop类型嵌入:此错误的堆栈跟踪如下: 无法将类型为“System.__ComObject”的COM对象强制转换为接口类型“Shell32.Shell”。此操作失败,因为针对IID为'{866738B9-6CF2-4DE8-8767-F794EBE74F4E}'的接口的COM组件的QueryInterface调用失败,原因是出现以下错误:不支持此接口(来自HRESULT的异常:0x80004002(E_NOINTERFACE))。
参考= False的Interop类型嵌入:此错误的堆栈跟踪如下: 框架版本:v4.0.30319 描述:由于未处理的异常,进程被终止。 异常信息:System.IO.FileNotFoundException