所有
我研究过互联网,发现了一些潜在的解决方案,但我一直在Windows 7机器上出错。
这是独家新闻。我有一个用VB.NET编写的应用程序,用于启动控制台应用程序。控制台应用程序将独立于我的VB.NET应用程序运行,因此用户可以关闭并重新启动VB.NET应用程序,并可能从同一安装启动第二个控制台应用程序会话。
我不想要这个。我希望在我的VB应用程序启动时识别正在运行的控制台应用程序的实例,并禁用运行控制台应用程序的能力,第二,第三,等等。时间。但是......我只想在从与VB.NET应用程序相同的文件夹启动控制台应用程序时禁用此功能。
这是我目前正在使用的代码: 公共函数CheckForConsoleApp()As Boolean '检查控制台应用程序是否在此文件夹中运行。如果是,请重新运行。
Dim p() As System.Diagnostics.Process
p = System.Diagnostics.Process.GetProcessesByName("MyConsoleApp")
If p.Length = 0 Then return false
Dim Path As String = My.Application.Info.DirectoryPath
Dim i As Integer
For i = 0 To p.Length - 1
Dim pPath As String = p(i).MainModule.FileName
pPath = pPath.Substring(0, pPath.LastIndexOf("\"))
if pPath = Path Then Return True
Next i
Return False
End Function
在我的系统(32位Windows XP)上,这不是问题,每次都有效。在同事的64位Windows 7计算机上,会生成一个错误,只能完成“ReadProcessMemory或WriteProcessMemory”的一部分。使用日志文件和其他努力表明:
Dim pPath As String = p(i).MainModule.FileName
行是发生故障的地方。
我们的应用程序必须在32位和64位平台上运行Windows 7,Vista和XP计算机。我发现WinAPI命令将读/写权限应用于某些内存位置,但这些命令专门用于ReadProcessMemory API命令,因此我还没有看到如何在.NET中应用类似的命令。
帮助? 谢谢, SH
答案 0 :(得分:2)
我不知道你是否找到了你的解决方案,但是你需要将你的构建选项设置为“任何CPU”而不是X86,那么它对我来说没问题。
答案 1 :(得分:0)
我一直在寻找这个问题的解决方案......甚至几周。我昨天放弃了希望并在这里发了一个问题,今天重新编写了我的搜索内容,发现了什么听起来像是答案。
它的要点是,寻找其他进程数据的进程是x86进程,并且正在尝试查找x64进程的数据。这就是我的申请失败的原因。有没有人有建议如何解决它?
这是一个相当长的帖子,但是如果你搜索“Charl”(帖子的作者的名字),你会发现我认为我的问题的答案。它可能不适用于该问题的所有其他事件,但我认为这是我的事情。
SH