using System.Diagnostics
然后开启一个新process
System.Diagnostics.ProcessStartInfo p=null
System.Diagnostics.Process Proc
p = new ProcessStartInfo("nnnn.exe","参数")
p.WorkingDirectory = exepath//设置此外部程序所在windows目录
Proc = System.Diagnostics.Process.Start(p)//调用外部程序
无法调试进程 test.exe [17936] 中的某些代码。请参阅下面的状态信息。IntelliTrace 代码失败(0x80131534)。
Managed (v4.6、v4.5、v4.0) 代码成功。
单击“确定”继续调试其余代码。要在以后禁止调试失败的代码类型,请在项目属性对话框中更改相应设置
创建工程环境有了以上的框架技术基础,我们就可以来创建我们的第一个Outlook插件项目了,因为我现在用的是Office 2013,我们先做一个简单的Outlook 2013插件好了。其实这个插件2010也能用,因为插件UI是用Ribbon。
我们先用“管理员身份”运行Visual Studio。因为我们开发的是一个COM类型的类库,而这个类库需要向注册表注入一些键值,VS需要管理员身份才能自动完成这些 *** 作。你问怎么用管理员身份运行?在图标上右键点击,展开的菜单里面就有。
然后我们创建一个“类库”项目,我们起个项目名称叫“TestOutlookAddin”,记得.NET的版本是3.5。随后我们添加NetOffice相应3.5版本的以下dll文件引用:
extensibility.dll
NetOffice.dll
OfficeApi.dll
OutlookApi.dll
我们再调整解决方案的编译环境,必须要有x86和x64两种。因为插件是对Office版本敏感的,x64的Office只能加载x64编译得到的插件dll,同样的,x86版本Office也只能加载x86版本dll。
我们还要对项目进行属性设置。
在“应用程序”标签页中,点击“程序集信息…”,在打开的对话框中勾选“使程序集COM可见”。
在“生成”标签页中,勾选“为COM互 *** 作注册”。
在“调试”标签页中,将“启动 *** 作”勾选“启动外部程序”,并且填入你机器上的Outlook.exe启动路径,在我的机器上,路径如下:
C:\Program Files\Microsoft Office\Office15\OUTLOOK.EXE
修改完这个以后,我们先进入C:\Program Files\Microsoft Office\Office15\,也就是Outlook.exe的所在文件夹,看看有没有outlook.exe.config文件。如果没有这个文件,请创建这个文件,并在文件里面写入以下XML
xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v1.0.3705" />
<supportedRuntime version="v1.1.4322" />
<supportedRuntime version="v2.0.50727" />
startup>
configuration>
这个文件必须和Outlook.exe在同一个文件夹中。如果没有这个文件,我们将无法进入调试状态。我想没有人能在不调试的情况下编写一整个插件吧?
编写样例代码
我们把环境的装备工作做好了,下面就来编写最简单的插件。
我们先在项目中创建一个RibbonUI.xml,并把它的生成 *** 作定义为“嵌入的资源”,内容如下:
xml version="1.0" encoding="utf-8" ?>
<customUI onLoad="LoadAction" xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
<ribbon>
<tabs>
<tab id="RibbonAddinSampleTabCS35" label="插件标签">
<group id="group1" label="分组名">
<button id="customButton1" size="large" label="按钮"/>
group>
tab>
tabs>
ribbon>
customUI>
对于Outlook 2007以上的版本来说,这个文件就是定义新增的菜单栏界面的。
然后再在项目中创建一个名为COMEntry的类,代码如下:
using System.Runtime.InteropServices
using NetOffice.OutlookApi.Tools
using NetOffice.Tools
namespace TestOutlookAddin
{
[COMAddin("Test Addin For Outlook", "", 3), CustomUI("TestOutlookAddin.RibbonUI.xml"), RegistryLocation(RegistrySaveLocation.CurrentUser)]
[Guid("AFE67651-951D-4A42-8CAB-E9BF7E219DDF"), ProgId("TestAddinForOutlook")]
public class COMEntry : COMAddin
{
}
}
其中COMAddin特性类声明了一系列需要加载和插件初始化的信 息,它的参数有“插件在Outlook插件列表中的显示名称”,“插件在列表中的描述”,“启动类型(3代表跟随Outlook启动而自动启动)”。
CustomUI表示了刚才我们定义的RibbonUI.xml作为嵌入的资源的资源访问路径,这点对于有一定经验的.NET开发人员一定不陌生。
RegistryLocation是定义了插件在注册表中注册到哪个根键值里面去。我们知道现在Windows安装文件都有“仅为我”和“所有人”安装选项,这个特性也是为了区分它的。不过这个仅仅是在调试状态下,因为发布的时候这个键值还是会由我们的安装包来自行控制,所以不需要在这个地方做过多纠结。
好了,我们在VS按下F5调试查看一下效果吧
我们得到了一个新的标签,标签内部有个新的分组和空白的“按钮”,鼠标移到按钮上,就会自动出现下面的d出说明框。
在此,需要先进行一个声明,下方的这个d出说明框是可以自定义标题和内容的,但是最下方的插件名称超链接和“详细信息”是无法去掉的。微软官方的解释是:为了区分这个到底是一个第三方插件还是Outlook自身自带的按钮。因为他们担心一些质量很差的插件影响了Outlook自身的行为,用户还要怪罪到微软头上。因此他们就用这种方法来明显区别插件和自身控件了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)