Articles of .net

如何用C#.NET编写程序,在Linux / Wine / Mono上运行它们?

在这种特殊情况下,我需要为Linux运行复杂的.NET应用程序。 复杂的我的意思是 – 这个项目开发了3年,我不想再写在Java或其他东西,开发和支持,以后的.NET和Java版本。 应用程序正在生成鼠标和键盘事件(通过winapi / dll导入)并使用串行端口。 我也有几个计时器延迟 – 串口通信(10-20ms,我不需要很大的精度)。 其余的只是很多简单的代码,没有什么特别的,没有奇怪的控制,没有directx等 我应该期待什么? 这会工作吗? 如果代码的某些部分会失败 – 我可以稍微改变一下,在.net应用程序和Linux上的迷你应用程序之间build立networking连接,我可以编写发送鼠标和键盘事件或RS232通信。 另外我想问一下Wine和.NET: 如何编写应该在Linux / Wine / Mono上运行的.NET应用程序? 哪个版本的框架? (1.x,2.0还是可以使用3.5?) 我应该避免(从Windows dll?定时器导入?) 编辑/从评论移动: 几年前我看到了单声道,但是很糟糕。 现在我看到它成长起来,支持LINQ,线程和其他复杂的function。 另外现在的帮助看起来非常严重。 我还没有接受答案,因为我看到人们仍然张贴非常有用的链接。 如果这个问题得到很多+1,我会重写它,也许这会帮助别人。 我希望这里的人有一些Linux上的.NET的实践经验…

如何使用mono将.NET Windows Service应用程序迁移到Linux?

使用mono将.NET Windows服务迁移到Linux最好的方法是什么? 我一直在试图避免执行该应用程序作为预定的命令。 是否有可能获得一个服务/系统守护进程(在Linux中)的行为?

Windows批处理脚本中的文件/文件夹select器对话框

通常,要求用户向批处理脚本提供文件名是一件杂乱的事情,不需要拼写错误,空格的path引号等等。 不幸的是,用户的准确性不是很出名。 在input文件位置直到运行时才知道的情况下,使用GUI进行文件selectinput可降低用户错误的可能性。 有没有办法调用File… Open从Windows批处理脚本File… Open样式gui文件select器或文件夹select器? 如果脚本用户安装了PowerShell或.NET,则可以。 请参阅下面的答案。 我也有兴趣看看其他人可以提供什么解决scheme。

C#中的“MoveFile”function(重启后删除文件)

我需要一个例子,可以让我传递一个参数 例如执行delete.exe /killme.txt 所以它将使用“MoveFile”在重启后删除killme.txt。 虽然请不要MS预编译版本,因为它有一个恼人的免责声明,每次运行在不同的计算机上。

使用BinaryReader读取大文件(> 1 GB)时,最佳缓冲区大小是多less?

我正在阅读二进制文件,这里是一个示例: public static byte[] ReadFully(Stream input) { byte[] buffer = new byte[16*1024]; int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { …… } } 缓冲区大小(16 * 1024)显然对性能有很大的作用。 我已经读过,它取决于I / O技术( SATA , SSD , SCSI等)以及其上存在的分区的分段大小(我们可以在格式化分区时定义)。 但是这里有一个问题: 是否有任何公式或最佳实践来定义缓冲区大小? 现在,我正在基于反复试验来定义。 编辑:我testing了我的服务器上的应用程序与不同的缓冲区大小,我得到了4095 * 256 * 16(16 MB)的最佳性能! 4096慢了4秒。 这里有一些旧post是非常有帮助的,但我仍然不能得到原因: .NET中更快(不安全)的BinaryReader 最佳文件缓冲区读取大小? 文件I / O与stream – 最佳的内存缓冲区大小 […]

如何获取当前用户在Windowslogin会话的唯一ID –

我需要得到一个唯一标识当前Windows用户的login会话的值。 这是一个winforms应用程序,而不是ASP.NET。 我将从多个进程中检索它,因此在同一个login会话中检索时需要返回相同的值。 在所有用户会话期间,只需在当前机器上保持唯一性 – 例如直到下一次重新启动机器。 我认为WindowsloginID是正确的,但似乎有点痛苦检索。 还有什么或更简单的方法来得到这个? 我将使用该ID来包含在一个命名pipe道服务的地址中,以在机器上运行的两个进程之间进行通信。 我想包括loginID,以避免有多个用户login时发生冲突,包括可能是同一用户的多个会话。

查找包含特定文本的窗口

我试图find一个特定的窗口是否已被一个进程打开。 该过程会产生多个窗口,我需要检查所有的窗口。 我不难find这个过程 foreach (Process p in Process.GetProcesses()) { if (p.MainModule.FileName.ToLower().EndsWith("foo.exe")) FindChildWindowWithText(p); //do work 问题是接下来要做什么。 我不能使用Process的MainWindowText ,因为它随着激活的窗口而改变。 然后我试图使用Windows函数EnumChildWindows和GetWindowText ,但我不知道如果我传递一个正确的句柄EnumChildWindows。 EnumChildWindows在通过MainWindowHandle时按预期工作,但当然MainWindowHandle随活动窗口而变化。 所以我通过Process.Handle ,但是当切换应用程序的窗口时,我得到了不同的句柄和不同的结果。 (据我所知,EnumChildWindows不仅返回句柄,而且还包括.NET中的控件 ,如果我能得到窗口的标题也不会有问题) 也许我正在做这个错误的方式,我需要一个不同的方法 – 我的问题再一次find一个与特定的正则expression式匹配的文本的窗口。 所以我可能需要一个枚举所有窗口的function,在任务栏中可见等等。 谢谢

语言栏在c#.NET中改变语言

TL; DR :尝试解决InputLanguage更改input布局但不更新语言栏显示的问题。 我正在为Trados Studio编写一个自定义插件。 其中的一部分是与应用程序本身和Word中的语言进行交互,就像这个问题一样: Windows .NET框架的所有可用语言列表 我似乎无法解决的最后一个问题是,在我使用InputLanguage设置键盘inputen-US的代码的一部分。 要说明的是, API是有限的,所以我必须在某些方面实现自动化。 最好的方法是在应用程序中使用默认的快捷方式: 首先,我将input语言改为en-US。 然后我发送一些密钥给应用程序。 然后我将input语言改回原来的样子。 然后我显示一个表单。 这里是代码: //change input language to English InputLanguage currentLang = InputLanguage.CurrentInputLanguage; InputLanguage newLang = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo("en-US")); if (newLang == null) { MessageBox.Show("The Upload Project function requires the En-US keyboard installed.", "Missing keyboard", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } else { InputLanguage.CurrentInputLanguage = newLang; […]

如何保持ReadDirectoryChangesW缺less文件更改

有很多文件活动的时候,网上有很多关于ReadDirectoryChangesW API函数缺less文件的文章。 大多数责怪ReadDirectoryChangesW函数循环被调用的速度。 这是一个不正确的假设。 我所看到的最好的解释是在下面的post,2008年4月14日星期一下午2:15:27的评论 http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/ 总结是ReadDirectoryChangesW函数报告文件更改,因为它们离开文件写入队列,而不是添加它们。 如果在犯罪之前添加了太多,就会失去其中一些的注意。 你可以看到这个与你的实现,如果你只是写一个程序,以真正快速生成一个目录中的超过1000个文件。 只要记下你得到的文件事件通知的数量,你会看到有些时候你不会收到所有的事件通知。 问题是,有没有人find一个可靠的方法来使用ReadDirectoryChangesW函数,而不必每次刷新卷? 这是不允许的,如果用户不是pipe理员,也可能需要一些时间才能完成。

生成机器指纹的最佳方法是什么?

我需要生成一个独特的string,这将不同的机器之间 – “设备指纹”。 什么是… 自定义实现的可能方法? (我有几个想法,但我认为你们可能有更好的) 现有解决scheme (商业/非商业都可以接受)