问题标签 [interopservices]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3857 浏览

c# - 对于某些版本的 Windows,Windows 服务无法在用户使用 WTSQueryUserToken 登录时启动交互过程

在这个链接之后,我在我的 C# 解决方案中实现了WTSQueryUserTokenCreateProcessAsUserWrapper.LaunchChildProcess("app_path") ,并从我的 Windows 服务中调用了该方法,该方法OnStart作为“LocalSystem”运行。它能够启动可以与桌面交互的进程,但适用于 Windows Professional 而不是 Windows Ultimate。我在 Windows Professional 64 位上尝试过,它能够以交互方式成功启动用户登录进程,但在 Windows Ultimate 64 位版本上,该CreateProcessAsUser方法返回 false,并且可以看到服务正在运行,SCM而进程不是。

我的进程是一个 win 表单应用程序,它需要使用当前登录的用户帐户运行以进行桌面交互,并使用InteropServices. 会不会是框架问题?如何解决问题?请帮忙。

编辑: 两台机器都运行 Windows 7 64 位。我添加了以下代码以获取错误代码CreateProcessAsUser它返回“请求的操作需要提升”作为错误。

它仅在 Windows 7 Ultimate 中发生,而不在 Windows 7 Professional 中发生。我需要为每个登录的用户运行我的进程,这就是为什么我认为我不能使用该CreateProcessWithLogonW方法。我现在如何解决这个提升权限问题?

编辑: 有2个app.manifest文件,一个在服务项目中,另一个在win表单(流程)项目中。我删除了这两个文件,构建了msiWiX再次测试。现在它在每台机器上成功运行,每个登录的用户帐户都启动了该进程。但是,现在引起了一个问题。实际上我需要在 windows/system 文件夹下写一些日志,我现在不能这样做。我正进入(状态 ”UnauthorizedAccessException" 从进程中抛出。此外,除了管理员之外,不允许任何用户停止或卸载进程,但在这种情况下,用户可以启动任务管理器并从那里结束进程,因为它正在使用相应的用户帐户运行。是可以使用用户帐户但以提升的权限运行进程,这样我就可以在 windows/system 文件夹下写入日志,并防止用户在没有管理员权限的情况下停止进程?至少解决第一个问题,即在系统下写入日志文件文件夹对我来说很重要。

编辑:SetTokenInformation与我的服务一起 添加后DuplicateTokenEx无法启动应用程序并显示日志SetTokenInformation()返回 FALSE。错误:客户端不持有所需的权限”。我提供了完整的代码,请查看我是否已正确更新所有步骤。

正如我在之前的编辑中提到的,在添加DuplicateTokenEx&之前SetTokenInformation,该服务能够运行应用程序,但无法在 System32 文件夹下登录。为了实现这一点,我更新了上面的代码,现在该SetTokenInformation()方法显示了权限错误。

编辑:最后,该服务可以在登录的用户帐户上启动我的进程,并将我的所有日​​志文件写入正确的用户 appdata 路径。我已经删除了SetTokenInformation。以下带有CreateEnvironmentBlock()方法的代码有助于该过程获得一个单独的用户环境并检索用户应用程序数据路径。

0 投票
1 回答
699 浏览

c# - Win API NTFS OpenFileByID 抛出 AccessViolationException

test() 中的 OpenFileByID 行给了我System.AccessViolationException Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我正在尝试复制此代码示例(请参阅答案),我在 Visual Studio Express 2013 for Windows Desktop 中运行该代码示例。但是这个例子似乎对我不起作用。它在 test() 的 OpenFileByID 行上中断。

简而言之,我正在获取一个文件的 ID,然后尝试从该 ID 创建一个文件句柄。稍后我计划使用该句柄来获取有关文件的信息。我使用 ID 的原因是我可以修复损坏的链接,因为目标文件的 GUID 比它的假定位置可靠得多。帮助表示赞赏!

编辑:我试图打开的文件是我桌面上的一个普通文本文件,没什么特别的。

0 投票
1 回答
1197 浏览

c# - 来自 C# DLL 的用户定义对象的 VBA 数组

背景信息:
我正在构建一个 SCADA 系统,它在 VBA 上运行,我寻求 C# 的一些功能。我用 C# 构建了一个 DLL 库,并获得了在 DLL 和 VBA 之间流动的基本数据。

我像这样返回了课程:

我的数据层:

VBA 调用的静态方法:

在 VBA 中,我以这种方式获取数据:

现在我的问题:
我如何返回类“BE_Log”的数组列表
编辑: 这是我卡住的地方:http ://puu.sh/hnPGe/472ff863d0.png

我一直在尝试编写一些 Microsoft 的文档,但运气不佳。

我遵循的原始指南是这个:
http ://www.analystcave.com/excel-use-c-sharp-in-excel-vba/

他陈述了以下内容,但是我不完全理解。

如果您使用数组作为参数,请务必使用 C# “ref” get by reference 选项,例如 ref int[] ar

我认为这与“MarshalAs”或我在 VBA 中读取数据的方式有关

0 投票
1 回答
558 浏览

c# - Microsoft Interops Word 将注释插入表格单元格崩溃 Word

我想使用 Microsoft.Interop.Word 以编程方式打开一个 Word 文档,并将注释插入到表格单元格中。我有单元格范围的开始和结束位置。(范围.开始\范围.结束)

当插入评论字崩溃

0 投票
1 回答
541 浏览

c# - WinServer 64 位 2012 R2 上的 Autodesk.Inventor.Interop.dll - 接口未注册

我正在尝试基于 Autodesk Inventor 引擎开发一个非常简单的 Web 应用程序。

我正在使用 Visual Studio 2010 和 Inventor 2015 在 Win7 64 位上进行开发,并且它在调试时一切正常,但是当我在 Web 服务器上发布时出现错误:

HRESULT:0x800401F3(CO_E_CLASSSTRING)

和消息

接口字符串无效

我收到错误的C# 代码行是:

我的测试的完整代码如下:

我直接从 Inventor 2015 指南中获得此代码,但在本地机器上(重复)一切正常,但在服务器上却不行。

  • 我检查了权限(每个人:完全控制)
  • 我在 system32 和 SysWOW64 上都使用 regsvr32 手动注册(无法注册)
  • 我在框架 32 和 64 上注册了 regasm(注册成功!)
  • 我将网站设置为使用 32 位应用程序

但没有什么可以解决这个问题。

我考虑过使用 pInvoke 手动导入 dll的可能性,但没有成功......

我用谷歌搜索了很多,我试图问 Autodesk 没有成功。

我在服务器上启动了 Inventor 以验证它是否工作正常,并且工作正常!

任何人都可以尝试帮助我吗?

提前感谢您的任何回复!

伊曼纽尔

0 投票
2 回答
142 浏览

c# - 从 VB.NET 转换为 C# - 未正确返回值

原始的 VB.net,运行良好:

转换后的代码现在在 C# 中(使用http://converter.telerik.com/

buff即使该HolderName函数实际上返回了一些值(使用 USB 监视器观察),问题仍然没有改变。为什么会发生这种情况,我该如何解决?

0 投票
0 回答
935 浏览

vb.net - 此文件无法访问的原因和解决方案是什么?

试图让一个基本的 VB.NET Excel 文件创建应用程序正常工作,从这里的一些示例代码开始,我得到了这个代码的错误消息:

我首先尝试过这个:

(未能逃脱回击),并且这个(“vbexcel.xlsx”)在某种程度上被误认为“52587100”,如您在此处看到的:

通过向路径添加子文件夹和转义字符,如下所示:

...我遇到了类似的错误,但这次它只是说它无法访问该文件(没有声称文件名被命名为“52587100”):

这段代码有什么问题,导致文件无法访问?

0 投票
1 回答
260 浏览

c# - Excel 文件的打印预览 - 对话框后关闭文件

我有一个代码可以打开 Excel 文件的打印预览(通过 Interops 服务)。我用它来给用户一个预览而不操纵内容。但是当打印预览对话框关闭时,文件本身保持打开状态。对话框被用户关闭后是否可以关闭文件或终止进程(或更好的方法)?

0 投票
1 回答
1103 浏览

c# - 媒体播放上的 WMPLib 控制台应用程序异常

我不习惯使用 InteropServices,但我正在做的是使用WMPLib控制台应用程序播放歌曲。当我从 Visual Studio 调试它时,该应用程序按预期工作。但它崩溃并给了我以下异常:

当我从命令行运行它时:

以下是play命令的简单代码:

任何帮助是极大的赞赏。

0 投票
0 回答
326 浏览

c# - 从 Unity 连接到 COM 对象

我在 Unity3D 中制作了一个产品配置器。我希望我的配置器的 Windows 版本与 Autodesk Inventor 进行通信,以制作配置产品的生产图纸。
我制作了一个 DLL 文件并将其作为插件统一使用:

我在 Unity 中的脚本如下所示:

但是当我运行我的项目时,我收到了这条消息:

NotImplementedException:请求的功能未实现。System.Runtime.InteropServices.Marshal.GetActiveObject (System.String progID) (在 /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs:317) InventorInterface.InventorConnection。 .ctor () InventorConnection.Start () (在 Assets/Scripts/Inventor/InventorConnection.cs:10)

我怎样才能让它工作?