如何在管理模式下使用参数安装inf文件启动命令提示符

时间:2014-08-27 18:30:52

标签: c# .net windows cmd installation

我知道这是一个老问题,但我的问题非常关键我尝试了很多方式在So或谷歌,但没有得到任何帮助。我想在产品安装期间安装inf文件。所以我必须使用命令行参数来完成它。我在"C:\Program Files\Com\ProductName"解压缩文件 在此位置,我有infsys文件。现在我编写了一个C#代码来安装驱动程序。

class install
{
    static void Main(string[] args)
    {
       string str = "RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 .\infname.inf";
         commandtorun(str);
      }
      static void commandtorun(string commandexecuted)
      {
         string currentstatus;
         ProcessStartInfo startInfo = new ProcessStartInfo();
         Process myprocess = new Process();
         try
         {
            startInfo.FileName = "cmd"; //
            startInfo.RedirectStandardInput = true;
            startInfo.RedirectStandardOutput = true;
            startInfo.UseShellExecute = false; 
            startInfo.CreateNoWindow = true;
            startInfo.WorkingDirectory = @"C:\Program Files\Com\ProductName";
            startInfo.Verb = "runas";

            myprocess.StartInfo = startInfo; 
            myprocess.Start();

            System.IO.StreamReader SR;
            System.IO.StreamWriter SW;
            Thread.Sleep(200);
            SR = myprocess.StandardOutput;
            SW = myprocess.StandardInput;
            SW.WriteLine(commandexecuted); 
            SW.WriteLine("exit"); 
            Thread.Sleep(200);
            currentstatus = SR.ReadToEnd();
            SW.Close();
            SR.Close();
         }
         catch (Exception e)
         {

         }
}

现在问题是如果我从开始菜单运行相同的命令cmd->以管理员身份运行并转到inf文件的路径然后运行命令,驱动程序安装成功,但如果我运行使用代码,我没有得到任何异常,但我找不到C:\Windows\System32\Drivers文件夹中的驱动程序

因此驱动程序没有安装。

任何人都可以帮我弄清楚我正在做的错误。

2 个答案:

答案 0 :(得分:1)

您的正在运行的应用程序应该被授予管理员权限,有几种方法可以授予访问权限

1-清单

<?xml version="1.0" encoding="utf-8" ?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" 
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" 
xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
        <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" 
    uiAccess="false" />
        </requestedPrivileges>
    </security>
</trustInfo>

<强> 2-自高程

Microsoft提供了完整的示例指南,以下是链接: http://support.microsoft.com/kb/981778

第3 - 注册表

您可以通过注册表添加授予管理员权限作为兼容性标记,为此,您应该添加一个名称为应用程序完整路径的密钥,并将值~RUNASADMIN添加到HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers密钥

答案 1 :(得分:0)

如果您想使用Admin Privilege运行控制台应用程序,则应首先将manifest[app.manifest]文件添加到控制台应用程序,然后按照here给出的步骤进行操作。

添加清单文件后,您必须更改清单文件中的以下设置,

将其更改为

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

<强>

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

请注意,用户应具有本地计算机的管理员权限,有时在应用程序执行期间,系统会提示用户输入凭据。