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

  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 洁净数
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    20. Valid Parentheses
    290. Word Pattern
    205. Isomorphic Strings
    71. Simplify Path
  • 原文地址:https://www.cnblogs.com/sdfkfkd/p/2342523.html
Copyright © 2011-2022 走看看