zoukankan      html  css  js  c++  java
  • Visual Studio 2008 Shell Isolated Mode(独立/隔离模式)

    目录

    一、什么是VS2008Shell
    二、开发Isolated Mode的应用程序
    三、个性化设置
    四、与VsPackage集成
    五、发布应用程序
    六、参考信息

    一、什么是VS2008 Shell

    要进行VS2008Shell开发,除了需要安装VS2008以外,还需要安装VS2008SDK,关于什么是VS2008Shell,请移步初探Visual Studio 2008 Shell

    二、开发Isolated Mode的应用程序

    1、创建新的独立模式应用程序项目
    新建项目,项目类型选择“其他项目类型”->“扩展性”,在右边模板中选择“Visual Studio Shell Isolated“,项目名称为”FirstIsolatedMode”。如下图

    确定以后就可以按F5运行试试,可以发现它产生一个独立的应用程序,看上去虽然与VS2008相似,但并不依赖于VS2008本身。编译以后,也可以直接定位到解决方案所在文件夹的Debug文件夹,执行“FirstIsolatedMode.exe”来查看效果。
    注意:必须安装了VC++项目才能创建独立模式的项目。

    2、项目介绍
    在“解决方案资源管理器”可以看到自动创建了2个项目:“FirstIsolatedMode”和“FirstIsolatedModeUI”。
    “FirstIsolatedMode”是启动项目,是一个C++的Win32应用程序。对于该项目,需要注意“FirstIsolatedMode.pkgdef”、及“Resource Files”文件夹中的“FirstIsolatedMode.rc”文件。
    “FirstIsolatedModeUI”会生成一个附属资源的DLL文件,它包括了程序的菜单定义及字符串资源,其中字符串资源(FirstIsolatedModeUI.rc)中包括一个ID为IDS_PLKSTRING的字符串,用于输入PLK,关于PLK后面会详细介绍到。

    3、文件及注册表变化
    首次运行以后,会在注册表中创建项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppEnv\9.0\Apps\FirstIsolatedMode_eabbb00f-4687-4e2b-bb1c-11c5d5c2eea2,其中的eabbb00f-4687-4e2b-bb1c-11c5d5c2eea2部分会有所不同,具体可以在FirstIsolatedMode项目的Source Files文件夹中的FirstIsolatedMode.cpp文件中查找“szRegKeyPath”变量来查看。
    同时还会有“我的文档”文件夹中创建“FirstIsolatedMode”文件夹,该文件夹与VS2008的相关文件夹有所相似,用于存放程序的相关数据。

    三、个性化设置

    1、修改应用程序的图标
    打开“FirstIsolatedMode.pkgdef”文件,“AppIcon”用于定义应用程序的图标,通过修改该值来改变应用程序的图标,“$RootFolder$”表示应用程序的安装文件夹。

    2、修改应用程序的标题
    在“FirstIsolatedMode.pkgdef”文件中,“AppName”表示应用程序的标题,即在标题栏显示的内容。

    3、定制Web浏览器的起始页
    “Web浏览器”是与VS2008中的“视图”->“其他窗口”->”Web浏览器“相同的功能,通过修改”FirstIsolatedMode.pkgdef“的”DefaultHomePage“项更改打开”Web浏览器所呈现的主页。

    4、修改闪屏(启动屏幕)图片
    在“FirstIsolatedMode.pkgdef”文件的“SplashScreenBitmap”项目表示闪屏图片。

    5、调整菜单
    在FirstIsolatedModeUI项目的Resource Files文件中,有一个FirstIsolatedModeUI.vsct文件,该文件中定义了可以在应用程序中显示的菜单。用<!-- -->注释掉的内容表示具备此菜单,如果要取消相关菜单,可以取消相应的注释。
    需要注意的是,对于修改过菜单,如果以前已经运行过项目,则在Vista和Win7系统中并不会起作用,需要删除
    ProgramData\Microsoft\AppEnv\9.0\Apps\FirstIsolatedMode_eabbb00f-4687-4e2b-bb1c-11c5d5c2eea2\2052中的*.CTM文件,然后重新运行项目。红色部分因项目而异。
    如果是英文版的,则删除的是
    ProgramData\Microsoft\AppEnv\9.0\Apps\FirstIsolatedMode_eabbb00f-4687-4e2b-bb1c-11c5d5c2eea2\1033中的*.CTM文件。

    6、移除不必要的VsPackage
    应用程序默认会加载一些VsPackage,如果不需要这些VsPackage,可以在FirstIsolatedMode.pkgundef文件中进行移除。这些Package注册在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppEnv\9.0\Apps\FirstIsolatedMode_eabbb00f-4687-4e2b-bb1c-11c5d5c2eea2\Packages中(红色部分会有所不同),例如要移除帮助的Package,通过查看可以发现帮助的Package ID为{4A791146-19E4-11D3-B86B-00C04F79F802},可以在FirstIsolatedMode.pkgundef文件中加入如下内容:
    [$RootKey$\Packages\{4A791146-19E4-11D3-B86B-00C04F79F802}]
    重新编译后运行程序,发现点击帮助菜单中的内容已没有任何反应,并且注册表中也没有该项内容。如果要去除帮助菜单,请参考第5点内容。

    7、更多内容请参考pkgdef文件说明

    四、与VsPackage集成

    目前的程序只是一个空壳,几乎没有任何功能,如果要扩展程序的功能,需要通过VsPackage进行扩展。

    1、添加VsPackage
    在解决方案上右击,“添加”->“新建项目”打开“添加新项目对话框”,项目类型选择“其他项目类型”->“扩展性”,在右边模板中选择“Visual Studio Integration Package”,项目名称为”FirstPackage”,然后确定。在向导的第3步(Select VSPackage Options)中,仅仅选择“Tool Window“;在第7步(Select Test Project Options)中,去掉所有选择,然后完成(Finish)。这一步的目的是添加一个带工具窗口的Package,用于集成到前面的应用程序中。如果操作成功,会在应用程序的“视图”->”其他窗口“中增加一个”My Tool Window“菜单,该菜单打开一个工具窗口。但是现在我们运行程序,并没有发现相关菜单,这是因为package还需要注册一下。

    2、向应用程序注册VsPackage
    打开刚刚添加的“FirstPackage”项目属性,在“生成事件”选项卡中,编辑“生成后事件命令行”的内容,内容如下:
    copy /y "$(TargetPath)" "$(SolutionDir)$(ConfigurationName)\PackagesToLoad\"

    "C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe" /pkgdeffile:"$(TargetDir)$(TargetName).pkgdef"  "$(TargetPath)"

    copy /y "$(TargetDir)$(TargetName).pkgdef" "$(SolutionDir)$(ConfigurationName)\PackagesToLoad\"

    以上内容中的C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe部分,需要根据VS2008SDK的安装路径做相应调整,在微软的相关文档中,最后还有一个增加“/setup“参数来运行主程序的命令,这里先不需要添加,因为如果添加该行,每次重新生成项目时会报错,这是一个已知的BUG。
    以上命令仅仅是生成注册VsPackage所需要的相关文件,如果要注册Package,定位到解决方案所在文件夹\Debug,为应用程序(FirstIsolatedMode.exe)创建快捷方式,然后打开快捷方式的属性,在“目标”的最后,加入/setup,然后执行该快捷方式进行手动注册(在注册之前,需要先编译Package)。

    3、测试VsPackage
    重新编译整够解决方案,然后首先执行依上面描述所建立的快捷方式进行Package注册(并不是每次都需要注册,理论上只需要注册一次),然后执行应用程序。可以发现,在“视图”->”其他窗口“中增加一个”My Tool Window“菜单。证明注册成功。

    五、发布应用程序

    在发布应用程序之前,需要了解一下,目前的应用程序及VsPackage直接发布出去是不能成功运行的,微软要求,对于Shell程序,需要注册SLK(Shell Load Key),SLK用于唯一标识每一个基于外壳的应用程序。对于Package需要注册PLK(Package Load Key),PLK用于认证、唯一标识每一个过行在VS2008中的Package,且未经认识的Package不能在VS2008中运行,同相适用于VS2008 Shell Isolated Mode。

    1、申请并注册SLK
    SLK的申请地址是http://www.vsipmembers.com/Anonymous/LoadKeyRegister.aspx,这是一个匿名申请网站。该站点包含PLK及SLK的申请,左边是PLK部分,右边是SLK部分(Generate Shell Load Key )。要申请SLK需要提交以下几项内容

    SLK内容 pkgdef中的内容 说明
    Company Name [$RootKey$]\CompanyName 应用的公司名称,注意该项内容在pkgdef中是被注释掉的,需要取消注释。我们这里填写Microsoft。
    Shell Name [$RootKey$]\AppName 应用程序名称,也是显示在标程序标题栏中的名称,这里我们就采用默认的FirstIsolatedMode。
    Shell Guid [$RootKey$]\ThisVersionDTECLSID 应用程序CLSID,每个应用会各不相同
    Shell Version [$RootKey$]\Productversion 应用程序版本,注意该项内容在pkgdef中是被注释掉的,需要取消注释。就采用默认值1.0

    在pkgdef中,还有一项"ID"=dword:00000069也处于注释状态,需要取消注释,该值(16进制)表示申请的SLK在资源字符串的ID,资源文件位于FirstIsolatedMode项目的Resource Files文件夹中的FirstIsolatedMode.rc文件。
    在申请页面填入上面的内容,然后点击“Generate SLK“按钮生成SLK,得到的SLK分多行提供,需要在文本编辑器中合并为1行,然后在字符串资源的ID为IDS_SLKSTRING行的标题中输入该SLK。注意:
    注册时提交的内容必须与pkgdef文件中的内容完全相同,否则可能得到一个无效的SLK。
    要测试申请的SLK是否有效,打开FirstIsolatedMode项目属性,在“配置属性”->“调试”选项卡中,设置“命令参数”为/noVSIP,然后重新编译项目并运行,如果SLK正确,则应用程序能够正常启动,否则会显示如下图所示信息:

    2、申请并注册PLK
    每一个Package应用环境中如果要能在应用程序中加载,需要指定PLK。PLK的注册网址同SLK,在该页面的左边就是注册PLK的内容。虽然我们目前的解决方案只加入一个Package(FirstPackage),但是FirstIsolatedModeUI项目也需要注册PLK,因为菜单是在该项目中定义的,否则许多菜单会显示不了。要注册PLK,需要提交以下几项内容:
    VsPackage表示Package类,这里具体指FirstPackage项目中的FirstPackagePackage.cs文件的[ProvideLoadKey]相关内容;
    UI项目表示的是FirstIsolatedMode项目中的FirstIsolatedMode.pkdef文件中的[$RootKey$\Packages\{593e9e57-0d19-4b82-aa7a-754f3e93a85d}]下面的内容(注意红色部分会有所不同),虽然是为FirstIsolatedModeUI申请PLK,但其内容仍然FirstIsolatedMode项目的FirstIsolatedMode.pkdef中。

    PLK申请页面 VsPackage UI项目 说明
    Company Name [ProvideLoadKey]第4个参数 CompanyName 公司名称,这里都使用Compnay
    Package Name [ProvideLoadKey]第3个参数 ProductName 产品名称,这里都采用默认
    Package Guid [Guid]所指定的内容 搜索文件中AppLocalizationPackage的值 Package的GUID
    Package Version [ProvideLoadKey]第2个参数 Productversion Package版本,使用默认值
    Min. Product Editon [ProvideLoadKey]第1个参数 MinEdition 支持VS产品的最低版本,标准版或专业版,使用默认值
    Min. VS Version 固定VS2008,无对应项 固定VS2008,无对应项 VS的最低版本,使用默认
      [ProvideLoadKey]的最后一个参数表示PLK存放于资源文件中的ID。    

    分两次分别申请UI及FirstPackage的PLK,对于UI的PLK,在该项目的字符串资源中进行注册,该资源ID为IDS_PLKSTRING。对于FirstPackage的PLK,在该项目的VSPackage.resx中新增一个字符串资源,该资源名称必须与[ProvideLoadKey]中的最后一个参数相同,这里是1。
    关于如何验证PLK的正确性,对于UI,在非开发环境下,如果PLK无效,会发现少很多菜单项。对于VsPackage,可以将VsPackage设为启动项目,然后运行。在VS2008蜂巢实验环境中,通过工具菜单的“Package Load Analyzer”工具查看Package的PLK是否有效,无效的PLK如下图:

    有效的PLK如下图

    3、制作安装程序

    添加一个安装项目,命名为Setup。
    添加项目输出文件。在Setup项目中右击,选择“添加”->“项目输出”,在“项目”列表中选择“FirstIsolateMode”,类型为主输出然后确定。按照上面的步骤继续添加FirstIsolateModeUI及FirstPackage。在这个过程中,会检测到N多依赖项,把除“Microsfot .Net Framework”之外的项排除。
    添加其他文件。在Setup项目中右击,选择“添加”->“文件”,定位到解决方案所在文件夹\Debug文件夹,选择“FirstIsolatedMode.exe.config”文件,继续添加文件解决方案所在文件夹\Debug\PackagesToLoad中的FirstIsolatedMode.pkgdef、FirstIsolatedMode.pkgundef和FirstPackage.pkgdef三个文件。
    添加文件夹。打开安装项目的“文件系统”视图,在应用程序文件夹中创建PackagesToLoad文件夹,在PackagesToLoad文件夹中创建1033文件夹。将“主输出来自FirstIsolateModeUI”移到1033文件夹中,将“主输出来自FirstPackage”、FirstIsolatedMode.pkgdef、FirstIsolatedMode.pkgundef和FirstPackage.pkgdef四个项目移到PackagesToLoad文件夹中。
    根据需要创建“程序”菜单和“桌面”的快捷方式。
    启动条件。打开Setup项目的“启动条件”视图。
    A、搜索VS2008VS2008Shell Runtime。在“搜索目标计算机”上右击选择“添加注册表搜索”,名称为“Search VS2008”,并设置属性:(Name)->Search Vs2008;Property->VSINSTALLDIR;RegKey->Software\Microsoft\VisualStudio\9.0;Root->vsdrrHKLM;Value->InstallDir。
    B、启动条件。如果存在VS2008Shell Runtime,就可以安装应用。在“启动条件”上右击,选择“添加启动条件”,并设置属性如下:(Name)->CheckForVS;Condition->VSINSTALLDIR<>;InstallUrl->空;Message->Install VS Shell Isolated。
    自定义操作。在应用安装成功以后,需要注册(/setup),在卸载之前需要移除(/remove)。可以通过自定义操作实现。打开Setup项目的“自定义操作”视图。
    A、在“安装”上右击,选择“添加自定义操作”,在“查找范围”中选择“应用程序文件夹”并在文件列表中选择“主输出来自FirstIsolatedMode”,然后确定。设置属性:(Name)->Primary Output from MyVSShellStub (Active);Arguments->/setup;Condition->空;CustomActionData->空;InstallClass->False。
    B、在“卸载”上右击,
    选择“添加自定义操作”,在“查找范围”中选择“应用程序文件夹”并在文件列表中选择“主输出来自FirstIsolatedMode”,然后确定。设置属性。(Name)->Primary Output from MyVSShellStub (Active);Arguments->/remove;Condition->空;CustomActionData->空;InstallClass->False。
    至此,安装项目制作完成,可以编译安装项目,然后测试安装包。

    4、安装的先决条件

    在安装应用之前,需要检查以下条件。A、目标机器已安装带SP1的Framework3.5,点击这里下载;B、已安装VS2008Shell独立模式运行环境,点击这里下载

    5、安装过程中可能出现的问题
    如果发布的是DEBUG版,在WinXP(SP2)机器上执行安装时可能会出现如下图的错误,解决办法是发布Release版本的安装程序。Win7环境下没有裸机测试过。

    此时如果转到目标文件夹强制执行应用程序,会出现“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”的错误。网上有许多解决办法,这里选择的是通过发布Release版来解决。

    六、参考信息

    Walkthrough: A Basic Isolated Shell Custom Tool

    pkgdef文件结构

    申请和安装PLK

    Obtain an SLK for a Shell-Based Application

    Introduction to the Visual Studio 2008 Shell

    Create a Setup Project for your Visual Studio Shell (VSShell Isolated Mode Part 3)

    SLK、PLK注册网址

    Agile Planne

  • 相关阅读:
    点击bindingNavigatorAddNewItem 关联的dataGridView不会新增一行
    dataGridView的使用经验
    Mybatis源码分析:Resources
    Mybatis源码分析:BaseBuilder
    反射类 Modifier类
    Mybatis源码分析:SqlSessionManager
    Mybatis源码分析:SqlSessionFactory
    Mybatis源码分析:环境设置Environment
    Mybatis源码分析:类型处理器TypeHandler
    Mybatis源码分析:MapperRegistry
  • 原文地址:https://www.cnblogs.com/sdfkfkd/p/2342523.html
Copyright © 2011-2022 走看看