从一个.NET Windows服务调用本地DLL失败
我有一个以本机DLL形式的第三方API,我从C#使用DllImport来称呼该API.此本地DLL取决于打开的第三方申请. 当我正常运行代码时,API执行预期并驱动应用程序.但是,当我运行与Windows服务相同的代码时,即使像我自己一样,API返回了我关闭应用程序时看到的相同(无证件)错误代码; Process Explorer确认本机DLL已从应用程序目录正确加载. 是什么可能导致这一点,我将如何解决这个问题? 解决方案 有点旧,但它是搜索中最重要的结果之一.因此,我的数据仍然会有所帮助. 我有一个本机DLL的第三方API,我使用dllimport从C#称呼该API.此本地DLL取决于打开的第三方申请. (t)生锈的办公室互动dll是相同的.实际上,您正在启动有关Office程序的背景实例. 背景实例也需要一个交互式会话,即使它没有显示任何内容(设计的hasumptions/误差). 服务不会在互动自vista以来的会话.不建议使用替代. 那是不再使用
0 2023-12-08
编程技术问答社区
CreateProcessAsUser 在活动会话中创建窗口
我正在使用Windows Service使用CreateProcessAsuser(请我们保持主题,并假设我有一个很好的理由执行此操作).与其他所有人在这里问的内容相反,我在主动终端会话(会话1)中获得了一个窗口,而不是与服务(会话0)相同的会话 - 这是不希望的. 我拨款 Scott Allen的代码;并提出以下内容.值得注意的更改是"恢复自我"," create_no_window"和命令行arms支持. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security; using System.Runtime.InteropServices; using System.Diagnostics; using System.Security.Principal; using System.ComponentModel; us
0 2023-12-08
编程技术问答社区
在服务器桌面会话中捕获屏幕
我已经开发了一个GUI测试框架,该框架会按计划进行我们公司网站的集成测试.当某件事失败时,它将屏幕截图,除其他外.这是在专用Windows Server上的登录用户2008上无人值守的. 问题是在桌面上屏幕截图,我已将远程桌面会话断开了连接.我得到以下例外: System.ComponentModel.Win32Exception (0x80004005): The handle is invalid at System.Drawing.Graphics.CopyFromScreen(Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Size blockRegionSize, CopyPixelOperation copyPixelOperation) at System.Drawing.Graphics.CopyFromScreen(Point upperLeftS
0 2023-12-08
编程技术问答社区
如何在WinRT 8.1上P/Invoke到kernel32.dll?
我正在尝试使用本机API方法(GetNativeSystemInfo),该方法标记为Windows 8.1上的电话和桌面存储应用程序.在文档中,它被列为居住在kernel32.dll中.伟大的!因此,我第一次尝试P/Invoke看起来像这样: [DllImport("kernel32.dll", CharSet = CharSet.Unicode, ExactSpelling = false, PreserveSig = true)] private static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSysInfo); 不幸的是,这无法在实际设备上运行-Kernel32找不到!碰巧的是,是 kernelBase.dll,因此我的第二次尝试: [DllImport("kernelBase.dll", CharSet = CharSet.Unicode, ExactSpelling = false, Preser
0 2023-12-08
编程技术问答社区
如何从Metro向本地dll进行P/Invoke?
我有一个由两个部分组成的库 - 一个.net组件 p/invokes 对本机第三方dll.在桌面模式下,这可以正常工作:但是,当从Metro样式应用程序引用汇编并运行它时,它会在 p/indoke 抱怨"无法加载dll'库':找不到指定的模块." 本机DLL不会做任何特别的事情,而只会为服务器创建现行的TCP/IP连接.该系统不知道这一点,而是本地DLL可以做任何事情.这就是为什么我怀疑可能不可能这样做的原因. 我也发现了这个 MSDN上的链接谈论加载"库"并提及清单文件中的包装依赖性,但是对我来说,仍然不清楚如何以 p/indoke it . 解决方案 将其添加到您的项目(右键单击项目,添加,现有项目.)检查是否在该项目的属性中,将内容设置为true(默认情况下是错误的.)构建. 其他解决方案 这可能是设计.您的问题可能是由于错误代码126从 loadLibrary . 如果您的应用程序以桌面模式运行,则应为应用程序定位桌面模式.您也可以使用较早版本的Win
0 2023-12-08
编程技术问答社区
使用Windows 8/WinRT的Metro应用程序的PInvoke
我在Silverlight 5中有一个简单的FM无线电调谐器应用程序,该应用程序使用PINVOKE从我的USB FM接收器中调用本机C ++ DLL的代码.此应用程序在Windows 8中使用Silverlight5. 现在,我正在尝试使用WinRT将其移植到Metro应用程序中. 从Silverlight到XAML UI的迁移非常容易且效果很好.使用命名空间system. 问题是,当我运行该应用程序并从曾经在我的SL5应用中工作的PinvokeD Native DLL调用任何方法(即使在Windows8上可以正常工作),我有此例外: System.DllNotFoundException was unhandled by user code Message=Unable to load DLL 'CarTFTFM.dll': The specified module could not be found. (Exception from HRESULT: 0x8
0 2023-12-08
编程技术问答社区
告诉操作系统从注册表中重新加载电源超时值
我有一些代码用于更新设备在入睡之前等待的时间. 我更新注册表,然后尝试告诉OS重新加载该值,但它不起作用. (重新加载部分不起作用.注册表更新正常.) 我要发布我的代码,希望有人知道我在做错什么: // Change the amount of seconds that the OS will wait before it goes to sleep. public void ChangeBatteryTimeout(int timeoutInSeconds) { // Attempt to open the key RegistryKey key = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Power\\Timeouts", true) ?? // If the return value is null, th
0 2023-12-08
编程技术问答社区
我如何使用DMProcessConfigXML来配置我的Windows Mobile设备?
我想创建一个C#程序来提供Windows Mobile设备.我已经在一个名为 dmprocessconfigxml 的功能上找到了MSDN文档.关于如何使用此功能. 如何在Windows Mobile应用程序中使用此功能?我怀疑这与使用Pinvoke有关. 谢谢, 保罗 解决方案 从托管代码中,您可以在Microsoft.windowsmobile.configuration中调用ConfigurationManager.processConfiguration. 名称空间. mssdn 这是示例代码: XmlDocument configDoc = new XmlDocument(); configDoc.LoadXml( ""+ ""+ ""
0 2023-12-08
编程技术问答社区
如何将软件输入面板(键盘)移动到windows手机屏幕的底部?
我正在尝试将键盘移至屏幕底部,以隐藏Windows Mobile 5/6上默认情况下显示的35px菜单栏.我看到的有关修改菜单栏的所有示例都涉及隐藏" ms_sipbutton"按钮.我问题的两个部分是: 如何在屏幕上向下移动35个像素? ," ms_sipbutton"在哪里定义? 解决方案 第一部分: 我可以召集键盘的最好方法是从 pinvoke.net中引用的Windows API呼叫集合 /p> 首先一堆dllimport语句: [DllImport("coredll.dll", SetLastError = true)] private static extern IntPtr FindWindow(string caption, string className); [DllImport("coredll.dll")] [return: MarshalAs(UnmanagedT
0 2023-12-08
编程技术问答社区
C#/C++ pInvoke提示
修改C#.NET CF的C ++程序的最佳方法是什么. 我有一个大的C ++代码库,可广泛使用STL.即迭代器,容器类和标准字符串. 在这许多轻量级课程之上,按价值传递. 我想为Windows Mobile Touch设备构建此代码库的C#gui. 值得吗? 我已经设法使用PINVOKE从C#.NET调用C ++代码进行了一些示例,但是为每个接入点和所有STL返回类型编写包装纸似乎都非常艰巨且丑陋.有其他方式还是我有点塞满? 顺便说一句.托管C ++不是一个选项,因为它不以.net cf. 以任何形式支持其支持. - 编辑: 我有一个关于pinvoke的特定问题. 假设您有一个函数,返回c ++字符串,值 std::string foo () { return std::string ("Hi"); } 我知道,由于无法使用pinvoke来调用C#从C#调用此功能,因为没有办法马歇尔字符串,但是我的问题是我什至无法在不分配
0 2023-12-08
编程技术问答社区
如何解决.NET CF异常 "Can't find PInvoke DLL"?
这是所有C#Gurus.我已经在一段时间内一直在敲打这个问题,在网上尝试了各种建议,毫无用处.该动作正在Windows Mobile 5.0中进行. 我有一个名为mydll.dll的dll.在mydll.h中我有: extern "C" __declspec(dllexport) int MyDllFunction(int one, int two); mydll.cpp中mydllfunction的定义是: int MyDllFunction(int one, int two) { return one + two; } C#类包含以下声明: [DllImport("MyDll.dll")] extern public static int MyDllFunction(int one, int two); 在同一类中,我以下方式称呼mydllfunction: int res = MyDllFunction(10, 10); 这是流
0 2023-12-08
编程技术问答社区
在Windows Mobile中找不到PInvoke DLL错误
我在Windows Mobile 5.0仿真器上工作的基本方案遇到了很多麻烦.我有一个Winforms应用程序,最终将其调用到本机代码中.部署工作正常,所有本机DLL都与Winforms .EXE复制在同一文件夹中.我还验证了远程文件查看器工具的情况. 但是,当我启动应用程序时,它总是会失败,"找不到pinvoke dll -system.missingmethodexception"错误(当呼叫到本机代码时,dllimport属性是无用的). i 知道是,本机dll与可执行文件相同的文件夹中找到.我还应该做什么? 我正在使用VS2008. 解决方案 要扩展Jared的答案,在CF中p/p/noveoke时,又有四个常见的理由: : 您缺少依赖项您要呼叫的本地库. 本地人是为错误的子系统(即桌面,而不是CE)编辑的 本机组件是为错误的处理器编译的(即X86而不是ARM) 您没有足够的虚拟内存来加载DLL. 您是否验证了dll输入点没有装饰,例如其他
0 2023-12-08
编程技术问答社区
MsiInstallProduct在window 2016上抛出NullReferenceException
我遇到了奇怪的错误: ERROR:System.NullReferenceException: Object reference not set to an instance of an object. at WindowsInstaller.MsiInterop.MsiInstallProduct(String product, String commandLine) at msicontroller.Program.Main(String[] arg 声明: [DllImport(MSI_LIB, CharSet = CharSet.Auto, SetLastError=true)] extern static public MsiError MsiInstallProduct(string product, string commandLine); 我仅在1个PC上遇到此错误,PC是Win Server 2016 解决方案
0 2023-12-08
编程技术问答社区
DriverPackagePreinstall可以在64位上工作(编译为32位)。
有什么方法可以编译一个调用DriverPackagePreinstall()(使用PinVoke)的应用程序,即使它针对32bit? ,它也可以在64位设备上使用(Windows 7) 原因将作为更大的应用程序的安装程序的一部分(使用Windows Installer Project)运行,该安装程序的目标是32位,但也必须在64位平台上运行. 这是我的代码: using System; using System.Linq; using System.Runtime.InteropServices; namespace MyDriver { class Program { static void Main(string[] args) { if (args.Count() == 0) { Console.WriteLine("Please s
0 2023-12-08
编程技术问答社区
如何在我的WiX安装程序的托管DLL/自定义动作中包含一个本地DLL?
我正在制作使用C#编写的自定义操作DLL的Wix/MSI安装程序.在那个自定义动作中,我正在使用本地/非托管DLL.这是一个例子: [DllImport("log.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.StdCall)] static extern int CloseLog(IntPtr hLog); 问题是,当我的MSI运行并调用自定义操作时,我的呼叫CloseLog抛出DllNotFoundException exception. 我可以手动将链接添加到log.dll的log.dll中 但问题是无法指定从C#项目中使用的log.dll的构建 所以有什么建议如何做? 解决方案 您可以通过像这样定义项目文件中的customActionContents
0 2023-12-08
编程技术问答社区
从C#调用MsiEnumRelatedProducts会崩溃
我从C#调用MsienumRealatedProducts没有任何麻烦.我尝试了P/Invoke定义的几个变体,但没有运气(退出和参考).我认为问题是最后一个参数,它是一个应该指向字符串长39个字符的LPTSTR. 这是Pinvoke并致电: public static string EnumRelatedProducts(string UpgradeCode, int Index) { string ProductCode; UInt32 rc = MsiEnumRelatedProducts(UpgradeCode, 0, Index, out ProductCode); Console.WriteLine("Returned"); if (rc != 0) { return string.Empty; } return ProductCode; } [DllImport("msi.dll", C
0 2023-12-07
编程技术问答社区
以编程方式检查MSI的ProductVersion
如何使用msi.dll快速获取MSI数据库的产品?我发现的主要内容涉及使用WindowsInstaller Com包装器,而这完成了工作,但我想通过使用msi.dll通过PINVOKE实现相同的结果. 解决方案 这是我想到的. c#Windows安装程序com库: // Get the type of the Windows Installer object Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer"); // Create the Windows Installer object Installer installer = (Installer)Activator.CreateInstance(installerType); // Open
0 2023-12-07
编程技术问答社区
创建一个全屏应用程序
我们希望我们的应用程序在全屏模式下运行,而在WIN CE 5.0驱动设备上没有标题栏.该应用程序是使用.NET紧凑型框架3.5(C#)开发的. 我遵循 this 教程,但是我遇到了一个错误.这是我的代码: namespace DatalogicDeviceControl { public partial class Form1 : Form { public const int SWP_ASYNCWINDOWPOS = 0x4000; public const int SWP_DEFERERASE = 0x2000; public const int SWP_DRAWFRAME = 0x0020; public const int SWP_FRAMECHANGED = 0x0020; public const int SWP_HIDEWINDOW = 0x0080; public const int SWP_NOACTI
0 2023-12-07
编程技术问答社区
驱动器上的可用空间-WinAPI-Windows CE
我忘记了Winapi的电话,以找出特定驱动器上剩下多少空间,而Pinvoke.net并没有给我任何爱. 顺便说一句,这是紧凑的框架,所以我认为coredll.dll. 任何人都能有更好的内存慢跑吗? 解决方案 getdiskfreespaceexexexexexexexexexexexexexexexexex.链接到pinvoke.net的桌面页面;只需替换kernel32 coredll. 不幸的是,System.IO.DriveInfo在紧凑型框架上不存在.它与Windows CE的Unix风格的单根树不太吻合.
0 2023-12-07
编程技术问答社区
如何在注册表更改后刷新资源管理器
更改注册表中的值后,我正在尝试刷新系统(Windows 8),此值会影响Explorer设置,是显示/隐藏复选框的值: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown RegEdit.Set_Value("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", _ "AutoCheckSelect", "1", Microsoft.Win32.RegistryValueKind.DWord) End Sub 并刷新系统我使用的系统: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click SHCha
0 2023-12-07
编程技术问答社区