我试图使用Shell32在c#中获取扩展文件属性.
我的代码如下.
var file = FileUpload1.PostedFile;
List<string> arrHeaders = new List<string>();
Shell shell = new ShellClass();
//Exception is thrown at next line
Folder rFolder = shell.NameSpace(Path.GetDirectoryName(file.FileName));
FolderItem rFiles = rFolder.ParseName(Path.GetFileName(file.FileName));
for (int i = 0; i < short.MaxValue; i++)
{
string value = rFolder.GetDetailsOf(rFiles, i).Trim();
arrHeaders.Add(value);
}
Run Code Online (Sandbox Code Playgroud)
我得到如下例外情况.

消息 - 无法将"Shell32.ShellClass"类型的COM对象强制转换为接口类型"Shell32.IShellDispatch6".此操作失败,因为对IID为"{286E6F1B-7113-4355-9562-96B7E9D64C54}"的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)) .
堆栈跟踪 - 位于Shell32.ShellClass.NameSpace(Object vDir)的System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc,IntPtr pCPCMD,IntPtr&ppTarget,Boolean&pfNeedsRelease),位于c:中的PBSWebApplication.Test.Button1_OnClick(Object sender,EventArgs e)\Projects\PBSWebApplication\PBSWebApplication\PBSWebApplication\Test.aspx.cs:System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)at System.Web.UI.WebControls.Button.OnClick(EventArgs e)的第33行System.Web.UI.Page.RaisePostBackEvent上的System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)中的System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) System.Web.UI.Page.ProcessRequestMain上的(NameValueCollection postData)(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)
如何解决这个问题?
谢谢.
我正在用C#和MATLAB制作一个软件,调用另一个软件(CMG)进行一些处理.我的问题是我在我的程序中放置的软件地址只在我的个人计算机上正确,而不是在客户的计算机上(我不知道在他们的计算机上通往CMG软件的路径是什么).
我如何提供地址的一般形式,以使其适用于每台计算机?
以下是我从MATLAB软件调用的路径:
C:\Program Files (x86)\CMG\STARS\2011.10\Win_x64\EXE\st201110.exe
Run Code Online (Sandbox Code Playgroud)
如您所见,它位于驱动器C中,版本为2011.10.因此,如果客户的版本是其他内容并且它安装在其他驱动器上,则此路径没有意义.