Tag: 进程

使用用户名和密码在C#中启动进程会抛出“拒绝访问”exception

在运行模拟的.NET 3.5 Web应用程序中,我试图通过以下方式执行进程: var process = new Process { StartInfo = { CreateNoWindow = true, FileName = “someFileName”, Domain = “someDomain”, Username = “someUserName”, Password = securePassword, UseShellExecute = false } }; process.Start(); – 在web.config中将信任模式更改为完全没有修复。 – 注意var securePassword是在代码中先前设置的secureString。 这会抛出“Access is Denied”作为其消息的exception。 如果我删除用户名和密码信息,则exception消失,但该过程以aspnet_wp而不是我需要的用户开始。 我在多个论坛上看过这个问题,从未见过提供过的解决方案。 有任何想法吗?

为什么无法获取启动进程的主窗口句柄?

我有一种情况,我在我的代码中启动一个进程,以便建立一个IPC通道。 我正在开始的过程是一个没有CLR支持的MFC应用程序。 我开始这个过程的应用程序是WPF应用程序中的C#模块(我认为这不是我的问题的结果)。 这适用于支持CLR的应用程序版本,它适用于除部署目标之外的每台计算机,Windows 7的触摸屏计算机。但出于某种原因,当我尝试使用此确切方案时,Process对象永远不会解析主窗口句柄( Process.MainWindowHandle )。 这样做还有另一种(甚至是pinvoke)方法吗? 这是安全的事吗? 我是那个盯着这个过程的人。 进程的主窗口句柄确实存在。 我看不出有什么不对。 如果有帮助,这是我的代码。 _applicationProcess = new Process(); _applicationProcess.StartInfo.FileName = _strProcessPath; _applicationProcess.StartInfo.Arguments = _strProcessArguments; _applicationProcess.Start(); long nTicks = Environment.TickCount; if (_applicationProcess.WaitForInputIdle(1 /*minute(s)*/ * 60000)) { try { do { // Don’t let total processing take more than 1 minute(s). if (Environment.TickCount > nTicks + 1 /*minute(s)*/ […]

不断监控流程

我编写了一些监视正在运行的Windows进程的代码。 我想知道某个过程何时开始以及何时结束。 代码就像我想要的那样工作。 现在,我希望在Windows窗体服务器应用程序中实现它 – 所以只要表单处于活动状态,它就会在循环中运行。 我想我应该让它可以使用BackgroundWorker异步运行。 我只是不确定最好的方法是什么以及如何做到这一点。 这是我的监视器代码: using System; using System.Management; using System.Diagnostics; using System.Collections.Generic; using System.ComponentModel; class ProcessMonitor { public static void Main() { Dictionary newProcs= new Dictionary (); while (true) { foreach (Process process in Process.GetProcesses()) { if (process.ProcessName.CompareTo(“Someprocess”) == 0) { if (!searchForProcess(newProcs, process.Id)) { ManagementObjectSearcher searcher = new ManagementObjectSearcher(“SELECT […]

跨进程C#访问静态成员

好的,这是问题所在。 我有一个第三方c#lib,我正在编写一个关于它的工具。 所以我想从另一个应用程序监控一些静态容器,但当然我无法在我的应用程序域中访问它们。 一个简单的例子是: namespace DefinedInAsembly1 { public class Resource { public static IList DateTimes {get;set;} } } namespace DefinedInAssembly2 { class RunningProgram { static void Main(string[] args) { while(true) { Resource.DateTimes.Add(DateTime.Now); Thread.Sleep(10000); } } } } namespace DefinedInAssembly3 { class ToolProgram { static void Main(string[] args) { //Accessing Resource.DateTimes with the values inserted from […]

在保持活动状态时隐藏其他应用程序

我有一个外部应用程序,它生成一些数据并存储它,当它运行时(它是一个窗口应用程序 – 而不是一个控制台应用程序)。 现在我正在创建自己的应用程序来分析这些数据。 问题是外部软件必须同时运行。 当用户打开我的应用程序时,我希望它自动启动外部应用程序并将其隐藏。 我在这个主题上搜索了很多,并尝试了一些我发现的建议。 首先我试过: Process p = new Process(); p.StartInfo.FileName = @”c:\app.exe”; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.StartInfo.UseShellExecute = false; p.StartInfo.WorkingDirectory = @”c:\”; p.StartInfo.CreateNoWindow = true; p.Start(); 这将启动外部应用程序,但不会隐藏它。 然后我读到命令promt可以隐藏应用程序: ProcessStartInfo psi = new ProcessStartInfo(“cmd.exe”, “/c \””c:\app.exe\””); psi.UseShellExecute = false; psi.CreateNoWindow = true; psi.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(psi); 同样,这会启动应用程序非隐藏。 然后我想到启动应用程序然后隐藏它。 我找到了以下内容: [DllImport(“user32.dll”)] public static extern […]

Process.Start()在模拟后抛出“拒绝访问”

我在使用Process.Start()+ Impersonation从文件服务器执行文件时遇到问题。 请帮我解决我的问题。 还有另一种方法吗? 这是按钮点击事件。 private void btnOpen_Click(object sender, EventArgs e) { try { newUser = cls.ImpersonateUser(“username”, “domain”, “password”); string fileName = @”\\network_computer\Test\Test.doc”; System.Diagnostics.Process.Start(fileName); } catch (Exception ex) { throw ex; } finally { if (newUser != null) newUser.Undo(); } } 这是假冒课程。 public class clsImpersonate { #region ‘Impersonation’ // group type enum public enum SECURITY_IMPERSONATION_LEVEL […]

WCF服务Process.Start在网络服务帐户下冒充为不同的用户

我使用带有NETWORK SERVICE Identity的AppPool .NET 4.0在IIS,Windows Server 2008 R2中托管了Wcf服务。 我的Wcf服务有一个使用Process.Start调用命令EXE的方法。 我需要使用不同的用户作为执行命令EXE(域用户帐户)的凭据。 我尝试执行它但它对我不起作用:它似乎没有执行命令EXE。 更新:进程已退出,但未执行代码 我得到的错误如下: 退出代码-1073741502 和eventvwr: Process Information: Process ID: 0xc50 Process Name: C:\DeployTools\DeployTools.Commands.Ejecutar.exe Exit Status: 0xc0000142 应用程序无法正确启动(0xC0000142)。 单击“确定”关闭应用程序 有什么建议? 码: StreamReader sr = null; StreamReader serr = null; try { var psi = new ProcessStartInfo(MY_COMMAND_EXE); psi.WorkingDirectory = Path.GetDirectoryName(MY_COMMAND_EXE); psi.Arguments = arguments; psi.Domain = DOMAIN; psi.UserName […]

当父NT服务被杀/崩溃时杀死子进程

我有一个Windows NT服务和第三方exe,我想作为NT服务的子进程运行,这样一旦我的NT服务进程崩溃,这个子进程也被杀死 为此,我找到了在父进程被终止时使用Kill子进程执行此操作的方法 我试图实现它,并使用普通的父进程正常工作,但当我在我的NT服务中做同样的事情,因为父SetInformationJobObject方法返回false和错误代码0的exception 例外:_COMPlusExceptionCode = -532462766 正常进程和导致此exception的NT服务进程有什么区别? 我正在使用Win2k8 R2 Server机器和C# [EDIT1]exception:GenericParameterAttributes =’((System.Reflection.RuntimeConstructorInfo)(ex._exceptionMethod))。ReflectedType).GenericParameterAttributes’抛出类型’System.InvalidOperationException’的exception{“”方法只能在类型上调用Type.IsGenericParameter是真的。“} 编辑2:因为在函数定义中使用DLLImport没有将SetLastError设置为true,所以最后一个错误是错误的正确ErrorCode是24表示结构的坏结果,那么应该是什么正确的结构? 编辑3:在我的64位win2k8R2服务器机器的NT Servce的情况下预期的正确长度似乎是144而不是上面的post中定义的112 编辑4:这是否是这样做的唯一方法,做同样的其他选择是什么?

将程序作为线程执行而不是作为进程执行

有没有办法执行另一个程序,如记事本,作为一个线程,所以它与我的程序共享相同的内存空间? 所以,如果我的程序结束,记事本也会这样,记事本不会出现在任务管理器中,只是我的程序?

启动后获取Process的友好名称

我正在为嵌入式系统编写监视服务,监视某些专有进程并在必要时重新启动它们。 (在你问之前,与恶意软件无关。这只是一个业务要求) 我需要从刚刚创建的进程中检索友好名称 ,以便稍后我可以使用该名称检索该进程以监视其运行状况。 我的问题如下: 如果我尝试在Process.Start()之后立即读取Process.ProcessName ,则会收到InvalidOperationException因为尚未完全创建该进程。 如果我使用Process.WaitForInputIdle()会发生同样的情况,但由于这需要一个消息泵,并且许多可执行文件可能是实际应用程序的无UI启动程序,因此这可能不是一个选项。 在做其他任何事情之前,我需要在创建流程后立即获取友好名称。 这是一段代码: var startInfo = new ProcessStartInfo { FileName = “notepad.exe” }; var process = new Process(); process.StartInfo = startInfo; process.Start(); process.WaitForInputIdle(); var friendlyName = process.ProcessName; 例如,如果正在启动的进程是Firefox,则会在最后一行抛出InvalidOperationException 。 那我该怎么办呢? 有更安全的方法吗? 编辑:添加了一个代码片段以便澄清。 EDIT2:改写整个问题以澄清,留下无关紧要的东西。