Tag: com

允许与不匹配完整性级别的.NET COM服务器连接

我有一个基于COM的客户端服务器设置的问题。 COM服务器用C#(.NET 4.0)编写,并作为(注册的)本地服务器运行。 取决于哪个应用程序连接到服务器,其他客户端将收到服务器执行失败(HRESULTexception:0x80080005(CO_E_SERVER_EXEC_FAILURE) 这里解释了底层的问题(在COM部分是完整性感知) 。 我了解它的方式是由于高级应用程序创build具有更高完整性级别的服务器而造成的。 当另一个未升级的应用程序连接时,不允许连接到同一个实例。 当一个非提升的应用程序创build该进程时,会发生同样的情况。 我试图实现页面上描述的解决scheme:修改registry以设置应允许所有客户端连接的安全描述符。 在C ++中有一个代码示例 ,但是这在.NET中有效地实现了相同的function: // Security Descriptor with NO_EXECUTE_UP var sd = new RawSecurityDescriptor("O:BAG:BAD:(A;;0xb;;;WD)S:(ML;;NX;;;LW)"); byte[] securityDescriptor = new Byte[sd.BinaryLength]; sd.GetBinaryForm(securityDescriptor, 0); RegistryKey key = Registry.ClassesRoot.OpenSubKey("AppID\\{APP-ID-GUID}", true); if (key == null) { key = Registry.ClassesRoot.CreateSubKey("AppID\\{APP-ID-GUID}"); } using (key) { key.SetValue("LaunchPermission", securityDescriptor, RegistryValueKind.Binary); } 但是,这并没有达到预期的效果。 当第二个客户端试图创build有问题的对象的实例时,Windows会尝试启动我的COM服务器的一个单独的实例,但服务器阻止两个实例作为相同的用户运行。 鉴于我设定的权限,我不希望第二个实例首先启动。 由于其中一个客户端应用程序在Medium […]

将一个简单的C#DLL转换成COM互操作组件

如何将C#DLL转换为VB6应用程序可以使用的COM互操作DLL?

XE2中COM是否被破解,我该如何解决它?

更新: XE2更新2修复了下面描述的错误。 下面的程序,从真正的程序截断,失败,在XE2例外。 这是从2010年开始的一个回归。我没有XE来testing,但是我期望程序能够在XE上正常工作(感谢Primož确认代码在XE上正常运行)。 program COMbug; {$APPTYPE CONSOLE} uses SysUtils, Variants, Windows, Excel2000; var Excel: TExcelApplication; Book: ExcelWorkbook; Sheet: ExcelWorksheet; UsedRange: ExcelRange; Row, Col: Integer; v: Variant; begin Excel := TExcelApplication.Create(nil); try Excel.Visible[LOCALE_USER_DEFAULT] := True; Book := Excel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT) as ExcelWorkbook; Sheet := Book.Worksheets.Add(EmptyParam, EmptyParam, 1, EmptyParam, LOCALE_USER_DEFAULT) as ExcelWorksheet; Sheet.Cells.Item[1,1].Value := 1.0; Sheet.Cells.Item[2,2].Value := […]

Excel互操作:_Worksheet或工作表?

我目前正在写关于dynamictypes,我给一个Excel互操作的例子。 我之前几乎没有做任何Office互操作,而且它显示。 C#4的MSDN Office Interop教程使用_Worksheet界面,但也有一个Worksheet界面。 我不知道有什么不同。 在我的荒谬简单的演示应用程序(如下所示)或者正常工作 – 但如果最好的做法决定一个或另一个,我宁愿使用它适当。 using System; using System.Linq; using Excel = Microsoft.Office.Interop.Excel; class DynamicExcel { static void Main() { var app = new Excel.Application { Visible = true }; app.Workbooks.Add(); // Can use Excel._Worksheet instead here. Which is better? Excel.Worksheet workSheet = app.ActiveSheet; Excel.Range start = workSheet.Cells[1, 1]; Excel.Range end […]

Windows / C#开发中是否有可embedded的Webkit组件?

我已经看到几个COM控件包装壁虎渲染引擎( GeckoFX ,以及由Mozilla提供的控制 – mozctlx.dll )。 Webkit的包装是否可以包含在.NET Winform应用程序中?

如何在C#中生成UUID

我正在编程创build一个.idl文件。 如何以编程方式为接口和方法创buildUUID。 我可以编程生成UUID吗?

以编程方式启动和停止IIS Express

我正在尝试在C#中构build一个小应用程序,该应用程序应该启动/停止IIS Express工作进程。 为此,我想使用MSDN上logging的官方“IIS Express API”: http : //msdn.microsoft.com/en-us/library/gg418415.aspx 据我所知,API是基于(只)COM接口。 为了使用这个COM接口,我已经通过添加引用 – > COM – >“IIS安装版本pipe理器接口”在VS2010中添加了对COM库的引用: 到目前为止这么好,但接下来呢? 有一个IIISExprProcessUtility接口可用,其中包括启动/停止IIS进程的两个“方法”。 我必须写一个实现这个接口的类吗? public class test : IISVersionManagerLibrary.IIISExprProcessUtility { public string ConstructCommandLine(string bstrSite, string bstrApplication, string bstrApplicationPool, string bstrConfigPath) { throw new NotImplementedException(); } public uint GetRunningProcessForSite(string bstrSite, string bstrApplication, string bstrApplicationPool, string bstrConfigPath) { throw new NotImplementedException(); } public […]

IApplicationActivationManager :: ActivateApplication在C#中?

我正在为metro应用程序进行自动化testing,我发现代码可以做很多我需要的,但它是用C ++编写的: http : //blogs.msdn.com/b/windowsappdev/archive/2012/09/04/自动化最testing-的-窗口8 apps.aspx 我的问题是,我怎么在C#中使用IApplicationActivationManager :: ActivateApplication,因为我不知道C ++? 该方法的详细信息可在此处find: http : //msdn.microsoft.com/en-us/library/windows/desktop/hh706903(v=vs.85).aspx 这是我从Shobjidl.idl中取得的代码: cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(ACTIVATEOPTIONS)") // IApplicationActivationManger is used to activate an immersive application identified by its Application User Model Id. // // Developers who are interested in using the Application Activation Manager do not need to implement the following // interface. An implementation […]

何时使用ReleaseComObject vs FinalReleaseComObject?

什么时候应该使用Marshal.FinalReleaseComObject vs Marshal.ReleaseComObject ? 使用Marshal.FinalReleaseComObject有没有危险?

如何获得在VB.NET中编写的用于Excel的COM服务器安装并注册在自动化服务器列表中?

版本 Excel 2007,Windows Vista,VB.NET,带有.NET 3.5 sp2的Visual Studio 2008,MSI安装程序包。 我正在尝试做什么 我有一个用VB.NET编写的Excel UDF。 它是作为COM服务器公开的,因为您无法直接在.NET语言中创buildExcel UDF。 安装是一个真正的痛苦,因为没有任何安装设置似乎得到它是正确的; 他们都没有给你一个安装包,把COM服务器放到客户端机器上,注册了服务器,注册了types库,以及在Excel 2007的自动化服务器列表中可见的组件。 我试过了 以下是types库的安装设置,它们的缺陷在编译时和安装时显而易见: vsdrfComSelfReg 在编译安装项目时没有任何警告 模块xxx.tlb注册失败。 HRESULT -2147024703 组件的ProgID和GUID在registry中设置,但该组件不出现在自动化服务器列表中 vsdrfDoNotregister 编译期间没有警告 安装工作,但当然TLB没有注册 vsdrfCOM 编译时警告:警告:无法为名为“xxx.tlb”的文件创build注册信息 types库在安装过程中未被注册 正确的设置应该是vsdrfCOM,如下所述: 问:任何人都可以告诉vsdrfCOM在Visual Studio的安装项目中的含义吗? 当我在安装项目中检查添加文件的属性中的“注册”属性时可用。 答:这意味着Visual Studio将在构build时提取COM注册数据,并将其放入MSI文件(主要是MSI文件的registry表,还有类表)。 所以当你安装它的时候,你的代码不需要自行注册,因为文件被复制到磁盘并且registry项被创build。 它还将通过向MSI的TypeLib表添加条目来创buildtypes库注册。 许多困难似乎是Vista特有的。 尤其是,使用REGCAP实用程序从.TLB文件生成.REG文件在Vista中不起作用。 如果不是这样的话,那么这个build议可能是有用的 。 相反,它完全可以产生空的.REG文件。 我已经尝试了这个StackOverflow后的所有build议。 这篇文章对技术问题有很好的描述: “引用”对话框中的条目来自HKCR \ TypeLibregistry项,而不是来自HKCR \ CLSID。 如果你的程序集没有显示在引用对话框中,但编译后的DLL仍然可以使用你的COM程序集,这意味着你的程序集正确地注册了类和接口,但是types库本身不是。 这个问题 任何人都有如何使安装注册组件和types库的想法? 我无法访问Windows XP计算机。 […]