开发环境:vs2005,windows2003,winform程序。
 主要功能事修改文件的扩展属性->备注的内容。
 程序中调用了ole32。
 程序在windows2003运行成功并能修改。
 但是当程序安装到windows2000/windowsXp下后,程序运行成功,但是修改不了了???!请帮忙啊!!!

解决方案 »

  1.   

    需要装.Net框架 已经一起打包
      

  2.   

    用到StgOpenStorageEx,错误时的返回值0x8007001,也就是返回的指针为null,具体的错误我不太清楚
      

  3.   

    api如下:
    uint hresult = StgOpenStorageEx(
                        filename,
                        (int)(STGM.READWRITE|STGM.SHARE_EXCLUSIVE),
                        (int)STGFMT.FILE,
                        0,
                        (IntPtr)0,
                        (IntPtr)0,
                        ref IID_PropertySetStorage,// Guid IID_PropertySetStorage
                        ref propSetStorage); //IPropertySetStorage propSetStorage
    )错误时propSetStorage=null,hresult=0x8007001
      

  4.   

    你没有安装.net framework环境,安装后就能运行,或者开发后打包,打包后就带有.net环境,直接到系统下安装,运行就可以了,这就是所说的程序托管和非托管的区别,.net需要托管程序才能运行!!!
      

  5.   

    如果上诉不行的话,你要考虑给系统打补丁,把win2000打补丁到sp4才能运行,xp考虑打补丁sp1先试试!!!sp2补丁先不要打,它跟数据库的sqlserver2000端口有冲突。
      

  6.   

    我重复试了N遍,估计是StgOpenStorageEx函数与Win200,XP兼容问题。但是MSDN上说WinDows2000以上的系统都支持StgOpenStorageEx??~
      

  7.   

    我专门转了一个测试系统:系统win2000+Sp4 +office,其他的什么都没有装,还是一样的!
      

  8.   

    冲突是什么呢?我试了一下,.txt,.rar能修改,office的不能
      

  9.   

    我在2003上做的实验 ,office可以修改 ,txt不好修改.http://www.cnblogs.com/king_astar/archive/2007/03/08/668332.html
      

  10.   

    Office文件都是使用结构化存储复合文件(Structured Storage, Compound File),
    uint hresult = StgOpenStorageEx(
                        filename,
                        (int)(STGM.READWRITE|STGM.SHARE_EXCLUSIVE),
                        (int)STGFMT.FILE,
                        0,
                        (IntPtr)0,
                        (IntPtr)0,
                        ref IID_PropertySetStorage,// Guid IID_PropertySetStorage
                        ref propSetStorage); //IPropertySetStorage propSetStorage
    个人猜测就是进行这种文件操作操作的.错误的情况下可以返回空的指针.
      

  11.   

    sorry,弄错了,全都可以,刚才不可以是因为文件的权限弄的不对.