Articles of .net

PATHvariables的GetEnvironmentVariable()和SetEnvironmentVariable()

我想用C#程序来扩展当前的PATHvariables。 在这里我有几个问题: 使用GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine)replace占位符(即'%SystemRoot%\system32'被replace为当前path'C:\Windows\system32' )。 更新PATHvariables,我不想用pathreplace占位符。 SetEnvironmentVariable后,不能再从命令框中打开程序(即命令框中的calc.exe不起作用)。 我使用下面的代码: String oldPath = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine); Environment.SetEnvironmentVariable("PATH", oldPath + ";%MYDIR%", EnvironmentVariableTarget.Machine); 在Windows中编辑和更改PATHvariables后,所有工作都会重新开始。 (我需要更改,否则不会被覆盖)

安装依赖的Windows服务

我的安装程序不支持安装服务,但我可以运行一个程序/命令行等,所以我的问题是如何安装Windows服务,并添加2依赖使用命令行? 该程序是一个.Net 2.0应用程序。 谢谢

有了MongoDB,是否可以通过.NET Reactive Extensions(RX)接收第三方编辑的通知?

我想知道是否有人知道是否有可能通过C#中的反应扩展(RX)获得任何编辑MongoDB数据库的实时通知? 这意味着任何第三方都可以编辑MongoDB数据库,服务可以监控编辑并即时对它们做出反应。 我曾经尝试过 我花了大量的时间在Google和其他地方研究这个问题,并且通过了所有可能相关的NuGet包。 我能find的唯一的比赛涉及Java,并且是德语的 。 更新1 看着可以玩的游标,在这里: http://www.warski.org/blog/2012/11/event-streaming-with-mongodb/

CoWaitForMultipleHandles API的行为不像logging

这是我看到的另一个问题引发的。 阅读可能太长,请耐心等待。 显然, CoWaitForMultipleHandles行为不像MSDN上logging的那样。 下面的代码(基于原始问题)是一个控制台应用程序,它启动一个testingWin32窗口的STA线程,并尝试发布和泵送一些消息。 它在CoWaitForMultipleHandles上做了三个不同的testing,都没有 COWAIT_WAITALL标志。 testing#1旨在validation这一点 : COWAIT_INPUTAVAILABLE如果已设置,则即使input已经被查看(但未被删除),但对CoWaitForMultipleHandles的调用将返回S_OK,如果队列中存在input,则会调用另一个函数(例如PeekMessage)。 这不会发生, CoWaitForMultipleHandles阻塞,并不会返回,直到等待手柄信号。 我假设任何挂起的消息应该被视为input (与MWMO_INPUTAVAILABLE的MsgWaitForMultipleObjectsEx相同,预计工作)。 testing#2旨在validation这一点 : COWAIT_DISPATCH_WINDOW_MESSAGES允许从ASTA或STA中的CoWaitForMultipleHandles分派窗口消息。 在ASTA中默认是没有窗口消息派发,STA中的默认只是一小组调度的特殊的消息。 该值在MTA中没有意义,并被忽略。 这也不pipe用。 当CoWaitForMultipleHandles调用COWAIT_DISPATCH_WINDOW_MESSAGES时,会立即返回错误CO_E_NOT_SUPPORTED (0x80004021)。 如果是COWAIT_DISPATCH_WINDOW_MESSAGES | COWAIT_DISPATCH_CALLS的组合 COWAIT_DISPATCH_WINDOW_MESSAGES | COWAIT_DISPATCH_CALLS ,呼叫块但不会泵送任何消息。 testing#3演示了我可以使CoWaitForMultipleHandles泵送调用线程的Windows消息队列的唯一方法。 这是COWAIT_DISPATCH_WINDOW_MESSAGES | COWAIT_DISPATCH_CALLS | COWAIT_INPUTAVAILABLE的组合 COWAIT_DISPATCH_WINDOW_MESSAGES | COWAIT_DISPATCH_CALLS | COWAIT_INPUTAVAILABLE COWAIT_DISPATCH_WINDOW_MESSAGES | COWAIT_DISPATCH_CALLS | COWAIT_INPUTAVAILABLE 。 这确实泵和发送消息,虽然显然这是一个无证的行为。 testing代码 (一个准备运行的控制台应用程序): using System; using System.Runtime.InteropServices; using System.Threading; […]

从Win32_PrintJob获取总页数

Win32_PrintJob WMI类有很多属性。 (请参阅MSDN上的Win32_PrintJob ) 我有一个小型的.NET应用程序,可以打印作业并显示作业的信息。 TotalPages propery给出了发送的页面数量。 但是这个数字没有考虑到用户请求的拷贝数量。 所以,如果用户想打印两页文档的5份副本, TotalPages的值将是2,而不是10。 如何获得打印作业的副本数量,或者获取要打印的页面总数(副本数量乘以作业中的页面数量)? 谢谢

处理用TrayIcon的ShowBalloonTip()显示的气球提示上的点击

我使用TrayIcon类的ShowBalloonTip方法来显示气球提示。 有没有办法处理这个气球的点击? 当我点击气球时,似乎没有生成任何事件,它只closures气球。

如何从exe文件中提取与用于创build此exe文件相同的.ico文件?

我试图做一些SFX:使一个程序生成一个wrapping.exe围绕另一个wrapped.exe。 Wrapping.exe将wrapped.exe作为资源embedded,并在执行时将wrapped.exe保存到临时文件夹中,并使用特定的命令行参数执行,然后将其删除。 wrapped.exe并不总是一个.Net程序,我没有它的源代码。 wrapping.exe应该在.net 3.5中完成,以便可以在Windows 7 SP1和更高版本上使用,而无需事先安装.Net。 Wrapping.exe是使用.Net 4.6中的Roselyn使用C#程序生成的。 我需要wrapping.exe通过资源pipe理器像wrapped.exe一样可视化。 我用硬编码的.ico文件做了一个成功的testing。 代码看起来像这样(简体): var compilation = CSharpCompilation.Create(…); var resourceDescription = new ResourceDescription( resourceName: "SFX.resourceName", dataProvider: () => File.OpenRead("wrapped.exe"), isPublic: false); using (var iconStream = File.OpenRead(@"wrapped.ico")) using (var peStream = File.Create("wrapping.exe")) using (var pdbStream = File.Create("wrapping.pdb")) using (var win32resStream = compilation.CreateDefaultWin32Resources( versionResource: true, noManifest: false, manifestContents: null, […]

在C#/ VB.NET或C ++ Win32中启用/禁用Aero

如何在C#.NET或C ++ Win32中禁用航空效果? 这是我在C / C ++中的testing代码,但只适用于我的应用程序是runnig #include <dwmapi.h> int main() { DwmEnableComposition(DWM_EC_DISABLECOMPOSITION); while(true); //… return 0; } //LINK dwmapi.lib 谢谢 编辑:我想通了 #include <Windows.h> #include <dwmapi.h> int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, PSTR str, int c) { DwmEnableComposition(DWM_EC_DISABLECOMPOSITION); MSG msg; ZeroMemory(&msg, sizeof(MSG)); while(GetMessage(&msg, 0, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } //Memory: 314KB […]

以编程方式中断活动屏幕保护程序?

原因:我正在开发一个需要在桌面上显示信息的紧急警报应用程序。 当客户端收到警报时,会popup一个窗口。 如果屏幕保护程序处于活动状态,或者显示器处于待机状态,则警报将不可见。 我想知道是否有可能通过某种程序化的鼠标移动或系统调用唤醒计算机,以便警报可见。 我认为鼠标移动或按键唤醒的原因是因为硬件中断,所以它可能是不可能的。 目前,该项目正在C#中实施。 我很想听听有关Windows,MAC和Linux的解决scheme。 这是客户的要求。 我已经考虑了以下几点: 在大多数电脑闲置后,用户必须login。 那些电脑不会得到警报 如果屏幕保护程序处于活动状态,那么很可能无论如何都没有人在电脑上。 我不是试图: 防止屏幕保护程序或节能模式一起启动。

什么时候我的进程被杀死了?

在Windows Server 2003上运行本机和托pipe代码的混合进程。 当我在进程资源pipe理器中杀死进程时,它会进入100%cpu状态,并在离开之前保持一段时间(有时甚至是10分钟)。 在这段时间里,我不能“杀”它或做任何事情。 当我通过进程pipe理器杀死进程来杀死进程时会发生什么样的情况? 我相信这不会调用任何析构函数,那么可能会导致这样的CPU使用? 谢谢,丹