目前我有1中方法:            C#利用Process调用winrar.exe,对文件解压(也是网上提供的方法),但是存在一个权限问题,有在有的地方并不能
解压的(以上的操作都是正确的)                   网上查了用unrar.dll,但是c#不能用
            请问:1.用什么办法解决第一个问题;
                 2.有没有其他的组件或插件可用
                 3.其他的方法     

解决方案 »

  1.   

    帮你Google了一下
      

  2.   

    rar还有个命令行的rar.exe,随你项目一起发布就没权限问题了
      

  3.   

                                string the_rar = string.Empty;
                                RegistryKey the_Reg;
                                the_Reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");
                                object the_Obj = the_Reg.GetValue("");
                                the_rar = the_Obj.ToString();
                                the_Reg.Close();                            if (Directory.Exists(extractDire) == false)
                                {
                                    Directory.CreateDirectory(extractDire);
                                }
                                //解压文件
                                string the_Info = "x " + newFileName + " " + extractDire + " -y";                            ProcessStartInfo the_StartInfo = new ProcessStartInfo();
                                the_StartInfo.FileName = the_rar;
                                the_StartInfo.Arguments = the_Info;
                                the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;                            Process the_Process = new Process();
                                the_Process.StartInfo = the_StartInfo;
                                the_Process.Start();
                                the_Process.WaitForExit();
                                the_Process.Close();
    当前用的是这种,你说的"rar还有个命令行的rar.exe,随你项目一起发布",怎么应用呢?
      

  4.   

    不是用COMPRESS和DECOMPRESS命令吗?
      

  5.   


    进入 winrar的安装目录,找到rar.exe
    拷贝到你的项目里
    new一个process调用 rar.exe
    rar.exe的参数如下:用法:     rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...>
                   <@列表文件...> <解压路径\><命令>
      a             添加文件到压缩文件
      c             添加压缩文件注释
      cf            添加文件注释
      ch            改变压缩文件参数
      cw            写入压缩文件注释到文件
      d             删除压缩文件中的文件
      e             解压压缩文件到当前目录
      f             刷新压缩文件中的文件
      i[参数]=<串>  在压缩文件中查找字符串
      k             锁定压缩文件
      l[t,b]        列出压缩文件[技术信息,简洁]
      m[f]          移动到压缩文件[仅对文件]
      p             打印文件到标准输出设备
      r             修复压缩文件
      rc            重建丢失的卷
      rn            重命名压缩文件
      rr[N]         添加数据恢复记录
      rv[N]         创建恢复卷
      s[名字|-]     转换压缩文件为自解压格式或转换回压缩文件
      t             测试压缩文件
      u             更新压缩文件中的文件
      v[t,b]        详细列出压缩文件[技术信息,简洁]
      x             用绝对路径解压文件<开关>
      -             停止扫描
      ac            压缩或解压后清除存档属性
      ad            添加压缩文件名到目标路径
      ag[格式]      使用当前日期生成压缩文件名
      ao            添加具有压缩属性的文件
      ap<格式>      添加路径到压缩文件中
      as            同步压缩文件内容
      av            添加用户身份校验(仅注册版本可用)
      av-           禁用用户身份校验
      c-            禁用注释显示
      cfg-          禁用读取配置
      cl            名称转换为小写
      cu            名称转换为大写
      df            压缩后删除文件
      dh            打开共享文件
      dr            删除文件到回收站
      ds            对固实压缩文件禁用名称排序
      dw            压缩后清除文件
      e[+]<属性>    设置文件排除和包括属性
      ed            不添加空目录
      en            不添加"压缩文件结束"标志
      ep            从名称中排除路径
      ep1           从名称中排除基本目录
      ep2           展开为完整路径
      ep3           扩展路径为包含盘符的完全路径
      f             刷新文件
      hp[密码]      同时加密文件数据和文件头
      id[c,d,p,q]   禁用消息
      ieml[属性]    用 E-mail 发送压缩文件
      ierr          发送所有消息到标准错误设备
      ilog[名称]    把错误写到日志文件(只有注册版本可用)
      inul          禁用所有消息
      ioff          完成一个操作后关闭 PC 电源
      isnd          启用声音
      k             锁定压缩文件
      kb            保留损坏的已解压文件
      m<0..5>       设置压缩级别(0-存储...3-默认...5-最大)
      mc<参数>      设置高级压缩参数
      md<大小>      以KB为单位的字典大小(64,128,256,512,1024,2048,4096 or A-G)
      ms[ext;ext]   指定存储的文件类型
      mt<线程>      设置线程数
      n<文件>       仅包含指定的文件
      n@            从标准输入设备读取文件名到包括
      n@<列表>      在指定的文件列表包括文件
      o[+|-]        设置覆盖模式
      oc            设置 NTFS 压缩属性
      or            自动重命名文件
      os            保存 NTFS 流
      ow            保存或恢复文件所有者和组
      p[密码]       设置密码
      p-            不询问密码
      r             递归子目录
      r0            仅递归通配符名称的子目录
      ri<P>[:<S>]   设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间
      rr[N]         添加数据恢复记录
      rv[N]         创建恢复卷
      s[<N>,v[-],e] 创建固实压缩文件
      s-            禁用固实压缩文件
      sc<chr>[obj]  指定字符集
      sfx[名称]     创建自解压压缩文件
      st[名称]      从标准输入设备读取数据(stdin)
      sl<大小>      处理小于指定大小的文件
      sm<大小>      处理超过指定大小的文件
      t             压缩后测试文件
      ta<日期>      添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
      tb<日期>      添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
      tk            保留原始压缩文件时间
      tl            设置压缩文件时间为最新文件时间
      tn<时间>      添加 <时间> 以后的文件
      to<时间>      添加 <时间> 以前的文件
      ts<m,c,a>[N]  保存或恢复文件时间(修改,创建,访问)
      u             更新文件
      v             自动检测创建卷的大小或者列出所有的卷
      v<大小>[k,b]  创建卷大小=<大小>*1000 [*1024, *1]
      vd            创建容量前清除磁盘内容
      ver[n]        文件版本控制
      vn            使用旧风格的卷命名方案
      vp            每卷之前暂停
      w<路径>       指定工作目录
      x<文件>       排除指定的文件
      x@            从标准输入设备读取要排除的文件名
      x@<列表>      排除指定列表文件中的文件
      y             假设对全部询问都回答是
      z[文件]       从文件读取压缩文件注释
      

  6.   

    Process process = new Process();
                                ProcessStartInfo startInfo = new ProcessStartInfo();
                                startInfo.FileName = "Rar.exe";//就winform运行的exe程序下的目录里面                            if (Directory.Exists(extractDire) == false)
                                {
                                    Directory.CreateDirectory(extractDire);
                                }                            startInfo.Arguments = "x " + newFileName + " " + extractDire + " -y";
                                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                                process.StartInfo = startInfo;
                                process.Start();
                                process.WaitForExit();
                                process.Close();
    跟以前的一样,我将newFileName:C:\Program Files\temp\Leadexp.rarextractDire:C:\Program Files\temp\Leadexp\;结果没有Leadexp文件夹里面没有任何的文件.在另外的一个,
    D:\work\code\Uploader_udp\Files\Leadexp.rar
    extractDire:D:\work\code\Uploader_udp\Files\Leadexp\里面有解压出来的文件哦
      

  7.   

    我试了一下,是目录名的问题 命令行 格式下 不支持长文件名,C:\Program Files改成 C:\Progra~1就可以了,你试试吧.
      

  8.   


    用API  GetShortPathName转化长文件名为短文件名     
      

  9.   

    谢谢各位,skep99的说法是对的.