c#中如何启用外部exe程序?

c#中如何启用外部exe程序?,第1张

c#调用外部exe程序,首先要

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自身的行为,用户还要怪罪到微软头上。因此他们就用这种方法来明显区别插件和自身控件了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12067455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存