<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      VS 2010 開發 ActiveX 自動升級外篇

      利用 ComRegisterFunction 特性在 Registry 中自動寫入新的 InstalledVersion

      1. 創建一個 Installer 類型的類

          [RunInstaller(true)]
          public partial class ComInstaller : System.Configuration.Install.Installer
          {
              public ComInstaller()
              {
                  InitializeComponent();
              }
      
              public override void Install(IDictionary stateSaver)
              {
                  base.Install(stateSaver);
      
                  RegistrationServices regsrv = new RegistrationServices();
                  if (!regsrv.RegisterAssembly(this.GetType().Assembly,
                  AssemblyRegistrationFlags.SetCodeBase))
                  {
                      throw new InstallException("Failed To Register for COM");
                  }
              }
      
              public override void Uninstall(IDictionary savedState)
              {
                  base.Uninstall(savedState);
      
                  RegistrationServices regsrv = new RegistrationServices();
                  if (!regsrv.UnregisterAssembly(this.GetType().Assembly))
                  {
                      throw new InstallException("Failed To Unregister for COM");
                  }
              }
          }


      2. 為 Version 類寫擴展方法 ToSpecialString()

              public static string ToSpecialString(this Version ver)
              {
                  return string.Format("{0},{1},{2},{3}", ver.Major, ver.Minor, ver.Build, ver.Revision);
              }


      3. InfoViewer 類中添加具有 ComRegisterFunction 特性的方法

              [ComRegisterFunction()]
              public static void RegisterClass(string key)
              {
                  // Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it
                  StringBuilder sb = new StringBuilder(key);
      
                  sb.Replace(@"HKEY_CLASSES_ROOT\", "");
                  // Open the CLSID\{guid} key for write access
                  RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
      
                  // And create	the	'Control' key -	this allows	it to show up in
                  // the ActiveX control container
                  RegistryKey ctrl = k.CreateSubKey("Control");
                  ctrl.Close();
      
                  // Next create the CodeBase entry	- needed if	not	string named and GACced.
                  RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
                  inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
                  inprocServer32.Close();
      
                  //Com Version
                  RegistryKey instver = k.CreateSubKey("InstalledVersion");
                  instver.SetValue("", Assembly.GetExecutingAssembly().GetName().Version.ToSpecialString());
                  instver.Close();
      
                  // Finally close the main	key
                  k.Close();
              }
      
              [ComUnregisterFunction()]
              public static void UnregisterClass(string key)
              {
                  StringBuilder sb = new StringBuilder(key);
                  sb.Replace(@"HKEY_CLASSES_ROOT\", "");
      
                  // Open	HKCR\CLSID\{guid} for write	access
                  RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
      
                  // Delete the 'Control'	key, but don't throw an	exception if it	does not exist
                  k.DeleteSubKey("Control", false);
      
                  // Next	open up	InprocServer32
                  //RegistryKey	inprocServer32 = 
                  k.OpenSubKey("InprocServer32", true);
      
                  // And delete the CodeBase key,	again not throwing if missing
                  k.DeleteSubKey("CodeBase", false);
      
                  //Com Version
                  k.DeleteSubKey("InstalledVersion");
      
                  // Finally close the main key
                  k.Close();
              }


      4. 右鍵 ActiveXDemo.Setup 項目 --> View --> Custom Actions


      5. 右鍵 Custom Actions --> Add Custom Action...


      6. 點擊 OK 之后


      7. 重新編譯,并制作 cab

      通過這種設置,以后只需修改 ActiveX 的項目版本號,即可在安裝時,系統自動寫入 Registry 中的 InstalledVersion,其值為 ActiveX 的項目版本的值;但要注意,在修改 ActiveX 的項目版本號的同時,也要修改 HTML 中 codebase 中的版本號,使兩者保持一致。

      posted @ 2013-03-26 14:06  踏歌長行  閱讀(246)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品麻豆中文字幕| 亚洲熟妇丰满多毛xxxx| 国产精品制服丝袜无码| 精品人妻日韩中文字幕| 日韩激情无码av一区二区| 国产午夜无码视频在线观看| 俄罗斯美女真人性做爰| 成人做爰www网站视频| 悠悠人体艺术视频在线播放| 亚洲熟妇色xxxxx亚洲| 国产精品高清视亚洲乱码| 武平县| 国产视频深夜在线观看| 99精品热在线在线观看视| 正在播放的国产A一片| 亚洲伊人久久大香线蕉| 国产一区二区日韩在线| 精品久久久久久无码人妻蜜桃| 大肉大捧一进一出视频| 日本视频一区二区三区1| 日韩中文字幕免费在线观看| 狠狠噜天天噜日日噜视频麻豆| 高清美女视频一区二区三区| 国产成年码av片在线观看| 极品美女自拍偷精品视频| 久久国产精品-国产精品| 青青国产揄拍视频| 苏尼特左旗| 五月丁香激激情亚洲综合| 国产精品一区二区三区四区| 亚洲天码中文字幕第一页| 亚洲精品国偷拍自产在线观看蜜臀 | 老少配老妇老熟女中文普通话| 性色高清xxxxx厕所偷窥| 国产精品女视频一区二区| 日本五十路熟女一区二区| 97国产揄拍国产精品人妻| 久在线视频播放免费视频| 国产精品538一区二区在线| 欧美日本在线一区二区三区| 成人精品天堂一区二区三区|