我是.net中的线程模型的新手.你会用什么来:
启动进程并等待应该在与主线程不同的线程上完成,因为此操作不应该影响应用程序.
例:
我的应用程序生成一个HTML报告.用户可以右键单击某处并显示"查看报告" - 现在我在临时文件中检索报告内容并启动处理html文件的进程,即默认浏览器.问题是我无法清理,即删除临时文件.
我开始了一个新项目,列出了所有正在运行的进程的完整路径.当访问某些进程时,程序崩溃并抛出Win32Exception.描述说明列出流程模块时发生错误.最初我认为这个问题可能会发生,因为我在64位平台上运行它,所以我重新编译它为CPU类型x86和AnyCPU.不过,我遇到了同样的错误.
Process p = Process.GetProcessById(2011);
string s = proc_by_id.MainModule.FileName;
Run Code Online (Sandbox Code Playgroud)
错误发生在第2行.空白字段显示发生错误的进程:

有没有办法绕过这个错误信息?
我发现的唯一好方法是:
import sys
import os
try:
os.kill(int(sys.argv[1]), 0)
print "Running"
except:
print "Not running"
Run Code Online (Sandbox Code Playgroud)
(来源)
但这可靠吗?它适用于每个流程和每个分发吗?
我们目前正在考虑构建一个缓存系统来保存从SQL数据库中提取的数据,并使其可用于其他几个应用程序(网站,Web服务等).我们想象缓存作为Windows服务运行,基本上由一个保存缓存条目的智能字典组成.我的问题是,应用程序的工作集是否有限制(它将在Windows Server 2003下运行)?或者是物理内存量的限制?
我想定期在Windows服务的指定用户帐户下运行任意.NET exe.
到目前为止,我已经让我的Windows服务运行逻辑来决定目标进程是什么,以及何时运行它.目标进程以下列方式启动:
在第一次出现这种情况,目标进程执行罚款,然后正常关闭.然而,每次后续时间,一旦目标进程启动,它就会抛出错误"应用程序无法正常运行(0xc0000142)".重新启动Windows服务将允许进程再次成功运行(第一次执行).
当然,目标是每次都成功执行目标进程.
关于上面的步骤2:要以不同的用户身份运行进程.NET调用win32函数CreateProcessWithLogonW.此函数需要一个窗口句柄来记录指定的用户.由于Windows服务未在交互模式下运行,因此它没有窗口句柄.这个中间过程解决了这个问题,因为它有一个可以传递给目标进程的窗口句柄.
请不要使用psexec或windows任务规划器的建议.我已经接受了我的生活,包括以上述方式解决问题.
我正在使用CreateProcess创建一个cmd.exe进程,该进程传递一个它执行并退出的参数,这会使命令提示符在屏幕上闪烁.
我试图通过将STARTUPINFO struct wShowWindow设置为SW_HIDE来避免这种情况,但此参数似乎影响调用窗口,而不是执行进程的窗口.
无论如何,您是否可以使用createprocess来启动隐藏在视图中的程序?
获取环境变量的正确winapi标准方法是什么?
这是我到目前为止:
Dim bProcess = Process.GetProcessesByName("By").FirstOrDefault
If bProcess IsNot Nothing Then
SwitchToThisWindow(bProcess.MainWindowHandle, True)
Else
Process.Start("C:\Program Files\B\B.exe")
End If
Run Code Online (Sandbox Code Playgroud)
它有两个问题.
那么这样做的正确方法是什么?
我想使用bash来处理制表符分隔文件.我只需要第二列,第三列是新文件.
如何PID在Node.JS程序中获得具有(进程ID)的进程名称,平台包括Mac,Windows,Linux.
它有一些节点模块吗?
我发现了很多关于它的问题,但是没有人解释我如何使用它.
我有这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Microsoft.FSharp.Linq.RuntimeHelpers;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.IO;
public class WindowHandling
{
public void ActivateTargetApplication(string processName, List<string> barcodesList)
{
[DllImport("User32.dll")]
public static extern int SetForegroundWindow(IntPtr point);
Process p = Process.Start("notepad++.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
IntPtr processFoundWindow = p.MainWindowHandle;
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我理解为什么它会在DllImport线路和线路上给我一个错误public static吗?
有没有人有想法,我该怎么办?谢谢.