如何使用特定用户执行外部 exe

Posted

技术标签:

【中文标题】如何使用特定用户执行外部 exe【英文标题】:How do i execute an external exe using a specific user 【发布时间】:2021-05-12 00:41:39 【问题描述】:

我正在制作一个需要使用 FileSystemWatcher 监视文件系统的应用程序,以检测安装对文件系统的影响。

为了消除噪音,我想过滤由其创建用户创建的事件,并且该代码与 //BUILTIN //Administrator 用户一起使用,在安装时默认使用该用户。但仍然有相当多的噪音。然后我想到了创建一个特定的用户,我可以用它来运行安装文件,并过滤那个特定的用户,从而消除几乎所有的噪音。

这是我的流程创建和启动代码

private void executeInnoInstaller(string path, string fileName)
        
            // Use ProcessStartInfo class
            ProcessStartInfo installerProces = new ProcessStartInfo();
            installerProces.CreateNoWindow = true;
            installerProces.UseShellExecute = false;
            installerProces.FileName = path + "\"" + fileName + "\"";
            installerProces.WindowStyle = ProcessWindowStyle.Normal;

            installerProces.UserName = "test";
            System.Security.SecureString encPassword = new System.Security.SecureString();
            
            foreach (System.Char c in "test")
            
                encPassword.AppendChar(c);
            
            encPassword.MakeReadOnly();
            installerProces.Password = encPassword;

            try
            
                // Start the process with the info we specified.
                // Call WaitForExit and then the using statement will close.
                using (Process exeProcess = Process.Start(installerProces))
                
                    exeProcess.WaitForExit();
                    //int exitCode = exeProcess.ExitCode;
                
            
            catch (Exception e)
            
                Console.WriteLine(e);
            
        

此代码退出并拒绝访问。

操作系统=Windows

我已经尝试使用 SHIFT 从操作系统文件处理程序运行 installer.exe - 使用指定的用户右键单击,它可以工作。 VisualStudio 以管理员身份运行。 我尝试以管理员身份运行构建项目的exe文件,但它不起作用。

没有用户凭据,代码可以工作并使用 //BUILTIN //Administrator 帐户

有人知道吗?

提前感谢您的时间和精力。

【问题讨论】:

installerProces.FileName确切值是多少? 你设置域了吗? docs.microsoft.com/en-us/dotnet/api/… installerProces.FileName 的确切值可能是“C:\Sjabby\Installations håndtering\Innounp\HY-POLY free Installer.exe” 我刚刚添加了这两行`installerProces.WorkingDirectory = path;` 没有任何区别。我没有连接到域。 现在我有了 .UserName = Environment.UserDomainName + "\test";但现在它返回“用户名或密码错误”。我知道它不是。用户名是test,密码是test 【参考方案1】:

如果我将 UAC 安全级别调到最低,则此代码有效。

【讨论】:

以上是关于如何使用特定用户执行外部 exe的主要内容,如果未能解决你的问题,请参考以下文章

使用 sw_hide 执行外部 exe

如何使用casperjs脚本运行外部程序(exe,bat)

如何使用特定的 java.exe 文件启动 .jar 文件,同时仍使用批处理在其自己的目录中执行 .jar?

MFC中如何关闭ShellExecute调用的外部执行程序?

如何在Windows下暂停和恢复任何外部进程?

如何在excel中使用VBA调用其它外部程序