如何在不提供 C# 管理员凭据的情况下从标准用户启动进程

Posted

技术标签:

【中文标题】如何在不提供 C# 管理员凭据的情况下从标准用户启动进程【英文标题】:How to start process from standard user without providing admin credentials in c# 【发布时间】:2021-01-20 10:58:37 【问题描述】:

我想在不提供管理员凭据的情况下从标准用户启动进程。我正在用 C# 编写代码。我从互联网上阅读了一些答案,但没有人在工作。

这是我的示例代码:

                Process proc = new Process();
                proc.StartInfo.FileName = "EXEPath";
                proc.StartInfo.Arguments = "argument";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.Start();
                proc.Close();

我正在编写此代码,但它仍然可以在我运行 Windows 应用程序时要求管理员凭据。请帮我!蒂亚!

【问题讨论】:

您的用户是否允许访问 exe 的路径?您的应用程序在运行上面的代码时是否在有或没有提升权限的情况下启动? 还有一个问题是您使用proc.Start() 启动一个进程,并在使用proc.Close() 启动后立即关闭它。您可以尝试删除proc.Close() 并检查 【参考方案1】:

这工作得很好,没有管理员凭据,并且记事本++被打开

using System.Diagnostics;

namespace SO

    internal class Program
    
        public static void Main(string[] args)
        
            Process proc = new Process();
            proc.StartInfo.FileName = "C:\\Program Files\\Notepad++\\notepad++.exe";
            proc.StartInfo.Arguments = "newfile.txt";
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardError = true;
            proc.Start();
        
    

【讨论】:

代码中的问题没有区别。这应该是评论,而不是答案。 @nilsK:差异应该是微不足道的,因为我们假设 OP 使用了可比较的参数,但是拥有完整的示例可能有助于 OP 和未来的读者了解如何正确引用可执行文件,同时重申不应该需要管理员凭据。当然,我认为真正的问题可能在于例如newfile.txt 的权限。 @JeremyCaney 好点,感谢您的反馈

以上是关于如何在不提供 C# 管理员凭据的情况下从标准用户启动进程的主要内容,如果未能解决你的问题,请参考以下文章

如何在不读取标准输入的情况下使用“npm login”设置 npm 凭据?

在不使用 COM 的情况下从 C++ 调用 C# 方法

有啥简单的方法可以在不进行反序列化的情况下从 json 中找出最低值 c#

如何在不使用提交的情况下从下拉列表中选择值

Angular 2:如何在不向用户显示标签的情况下从 JSON 响应呈现 HTML? [复制]

如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?