ocx怎么得到classid,与动态执行 bat 文件

1.注册ocx控件: Regsvr32 [PATH]\xxx.ocx
2.利用Regedit.exe注册表编辑器,在编辑器的查找里直接输入 .OCX
文件名进行查找,找到:
“HKEY_CLASSES_ROOT\CLSID\{xxxxxxxxxxxxxxxxxxxxxxxxxxx}”主键
后,再利用注册表编辑器菜单上-[注册表]-[导出注册表文件]-然后在文件
选择窗里输入导出的注册表文件名

public sealed  class COMUtils
    {
      /// <summary>
      /// 检查指定的 COM 组件是否已注册到系统中
      /// </summary>
      /// <param name="clsid">指定 COM 组件的Class Id</param>
      /// <returns>true: 表示已注册;false: 表示未注册</returns>
      public static System.Boolean IsRegistered(String clsid)
      {

         //参数检查
          System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(clsid), "clsid 不应该为空");

          //设置返回值
          Boolean result=false;

          //检查方法,查找注册表是否存在指定的clsid
          String key = String.Format(@"CLSID\{{{0}}}", clsid);
          RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(key);
          if (regKey != null)
          {
              result = true;
          }

          return result;
      }//end method

      /// <summary>
      /// 注册指定的 COM 组件到系统中
      /// </summary>
      /// <param name="file">指定的 COM 组件</param>
      /// <returns>true: 表示已注册;false: 表示未注册</returns>
      public static System.Boolean Register(String file)
      {

          //参数检查
          System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(file), "file 不应该为空");

          //设置返回值
          Boolean result = false;

          //检查方法,查找注册表是否存在指定的clsid
          string fileFullName = "\"" + file + "\"";
          System.Diagnostics.Process p=System.Diagnostics.Process.Start("regsvr32", fileFullName + " /s");

          if (p != null && p.HasExited)
          {
              Int32 exitCode=p.ExitCode;
              if (exitCode == 0)
              {
                  result = true;
              }
          }
          return result;
      }//end method

      /// <summary>
      /// 反注册指定的 COM 组件
      /// </summary>
      /// <param name="file">指定的 COM 组件</param>
      /// <returns>true: 表示反注册成功;false: 表示反注册失败</returns>
      public static System.Boolean UnRegister(String file)
      {

          //参数检查
          System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(file), "file 不应该为空");

          //设置返回值
          Boolean result = false;

          //检查方法,查找注册表是否存在指定的clsid
          string fileFullName = "\"" + file + "\"";
          System.Diagnostics.Process p = System.Diagnostics.Process.Start("regsvr32", fileFullName + " /s /u");

          if (p != null && p.HasExited)
          {
              Int32 exitCode = p.ExitCode;
              if (exitCode == 0)
              {
                  result = true;
              }
          }
          return result;
      }//end method

    }//end class

原理:

C#代码:

方式一:

引用命名空间:using Microsoft.Win32;

判断指定CLASSID 的注册表键值是否存在来判断是否存在注册类。

RegistryKey regKey = Registry.ClassesRoot.OpenSubKey("CLSID\\{00460182-9E5E-11d5-B7C8-B8269041DD57}\\");

if (regKey != null)

{
                        MessageBox.Show("存在指定ClassID的注册");
                    }

方法二:

通过包装的对象,直接建立实例,来确定对象是否注册,失败表示未注册,成功表示注册。

方法三:

通过ClassID建立对象。

public object GetActiveXObject(Guid clsid)
        {
            Type t = Type.GetTypeFromCLSID(clsid);
            if (t == null)
                return null;
            return Activator.CreateInstance(t);
        }

动态执行*.bat 文件:

函数原型为:

/// <summary>
/// 打开控制台执行拼接完成的批处理命令字符串
/// </summary>
/// <param name="inputAction">需要执行的命令委托方法:每次调用 <paramref name="inputAction"/> 中的参数都会执行一次</param>
private static void ExecBatCommand(Action<Action<string>> inputAction)

使用示例如下:

ExecBatCommand(p =>
{
    p(@"net use \\10.32.11.21\ERPProject [email protected] /user:yt\ERPDeployer");
    // 这里连续写入的命令将依次在控制台窗口中得到体现
    p("exit 0");
});

注:执行完需要的命令后,最后需要调用 exit 命令退出控制台。这样做的目的是可以持续输入命令,知道用户执行退出命令 exit 0,而且退出命令必须是最后一条命令,否则程序会发生异常。

下面是批处理执行函数源码:

/// <summary>
/// 打开控制台执行拼接完成的批处理命令字符串
/// </summary>
/// <param name="inputAction">需要执行的命令委托方法:每次调用 <paramref name="inputAction"/> 中的参数都会执行一次</param>
private static void ExecBatCommand(Action<Action<string>> inputAction)
{
    Process pro = null;
    StreamWriter sIn = null;
    StreamReader sOut = null;

    try
    {
        pro = new Process();
        pro.StartInfo.FileName = "cmd.exe";
        pro.StartInfo.UseShellExecute = false;
        pro.StartInfo.CreateNoWindow = true;
        pro.StartInfo.RedirectStandardInput = true;
        pro.StartInfo.RedirectStandardOutput = true;
        pro.StartInfo.RedirectStandardError = true;

        pro.OutputDataReceived += (sender, e) => Console.WriteLine(e.Data);
        pro.ErrorDataReceived += (sender, e) => Console.WriteLine(e.Data);

        pro.Start();
        sIn = pro.StandardInput;
        sIn.AutoFlush = true;

        pro.BeginOutputReadLine();
        inputAction(value => sIn.WriteLine(value));

        pro.WaitForExit();
    }
    finally
    {
        if (pro != null && !pro.HasExited)
            pro.Kill();

        if (sIn != null)
            sIn.Close();
        if (sOut != null)
            sOut.Close();
        if (pro != null)
            pro.Close();
    }
}
时间: 2024-10-11 07:15:39

ocx怎么得到classid,与动态执行 bat 文件的相关文章

Javascript中使用WScript.Shell对象执行.bat文件和cmd命令

Javascript中使用WScript.Shell对象执行.bat文件和cmd命令 http://www.cnblogs.com/ZHF/p/3328439.html WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript.shell是服务器系统会用到的一种组件.shell 就是“壳”的意思,这个对象可以执行操作系统外壳常用的操作,比如运行程序.读写注

win7计划任务执行BAT文件问题

今天下午做了一个调用java 可执行jar的程序,想通过win7的计划任务来调用 批处理命令: java -jar BIDropSyc.jar    或者 javaw -jar BIDropSyc.jar 但添加以后发现win7没有调用jar程序,单独点击批处理文件能执行.发现问题是由于没有添加批处理文件所在路径.在如下图框中添加上即可. win7计划任务执行BAT文件问题,布布扣,bubuko.com

C# 如何执行bat文件 传参数

C# 如何执行bat文件 传参数 分类: C# basic 2011-04-25 18:55 3972人阅读 评论(0) 收藏 举报 c#stringpathoutput [c-sharp] view plaincopy Process p = new Process(); string path = ...;//bat路径 ProcessStartInfo  pi= new ProcessStartInfo(path, ...);//第二个参数为传入的参数,string类型以空格分隔各个参数

使用java对执行命令行 或 执行bat文件

public class Hellotianhao { public static void main(String[] args) throws Exception{ System.out.println("hello tianhao"); Runtime.getRuntime().exec("cmd /k mkdir d:\\xutianhao"); } } 运行结果是在d盘新建了一个名为xutianhao的文件夹 java执行bat文件  bat文件书写注意在

Js使用WScript.Shell对象执行.bat文件和cmd命令

http://www.jb51.net/article/58669.htm WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript.shell是服务器系统会用到的一种组件.shell 就是“壳”的意思,这个对象可以执行操作系统外壳常用的操作,比如运行程序.读写注册表.环境变量等.这个对象通常被用在VB或VBS编程中. 安装WScript.Shell对象:

C# 执行bat文件 批处理 - 实现应用程序开机启动功能

最近在做一个项目(平台 .net 4.0 winform)的时候,客户要求软件能提供开机启动的设置选项 开始的时候,实现方法如下: public class Boot { //写入注册表 public static void bootFromBoot(string ExeName, string ExePath) { RegistryKey rKey = Registry.LocalMachine; RegistryKey autoRun = rKey.CreateSubKey(@"SOFTWA

JavaScript执行bat文件清理浏览器缓存

function exec() { window.onerror = function (err) { if (err.indexOf('utomation') != -1) { alert('命令已被用禁止!'); return true; } else{ return false; } }; var wsh = new ActiveXObject('WScript.Shell'); if (wsh){ wsh.run("C:/Users/Vision/Desktop/1111.sql&quo

C# 执行bat文件

private void RunBat(string batPath) { Process pro = new Process(); FileInfo file = new FileInfo(batPath); pro.StartInfo.WorkingDirectory = file.Directory.FullName; pro.StartInfo.FileName = batPath; pro.StartInfo.CreateNoWindow = false; pro.Start(); p

java 创建和执行bat

/* */package com.***app.mappcore.impl.util; import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter; /** * 批处理文件的执行类.<br> * @author mapengfei <br> * @versio