首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中执行命令

在C#中执行命令
EN

Stack Overflow用户
提问于 2015-04-09 23:28:33
回答 1查看 573关注 0票数 0

好了,在真正问这个问题之前,我会给你们一个简短的描述,我正在尝试做什么。我在这里写了几个批次来安装东西,它们工作得很好。问题是..。我想用C#编写一个程序,它可以做与批处理相同的事情。批处理所做的大部分工作是调用文件,并使用/S或/silent等参数触发它们。当然,还要激活Windows/Office。但我在运行Office/Windows激活器时遇到了问题。下面,您将看到我们使用的批处理的结构以及C#程序的结构。

代码语言:javascript
复制
@echo off

::Office Installation
:AskOffice
set INPUT=
set /P INPUT=Do you want to install Office 2010 (1), Office 2013 (2) or skip this step (3)? %=%
If /I "%INPUT%"=="1" goto 1 
If /I "%INPUT%"=="2" goto 2
If /I "%INPUT%"=="3" goto eof
echo.
echo Invalid input & goto AskOffice

::Office 2010
:1

set INPUT=
set /P INPUT=Do you want to install Office (1) or just activate it (2)?
If /I "%INPUT%"=="1" goto instalar2010 
If /I "%INPUT%"=="2" goto windows2010

:instalar2010
echo Installing Office 2010...
"\\jamaica\sistemas$\INSTALL\~SOFTWARES\Office\Office 2010\setup.exe" /config "\\jamaica\sistemas$\INSTALL\~SOFTWARES\Office\Office 2010\ProPlus.WW\config.xml"
goto windows2010

:windows2010
if defined ProgramFiles(x86) (
    @echo You're running a x64 system...
    goto 2010x64
) else (
    @echo You're running a x86 system...
    goto 2010x86
)

:2010x86
::Office 2010 Activation (x86)
echo Activating Office 2010 (x86)...
c:\windows\system32\cscript "C:\Program Files\Microsoft Office\Office14\OSPP.VBS" /inpkey:XXXXXXXXX
c:\windows\system32\cscript "C:\Program Files\Microsoft Office\Office14\OSPP.VBS" /act
goto eof

:2010x64
::Office 2010 Activation (x64)
echo Activating Office 2010 (x64)...
c:\windows\system32\cscript "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS" /inpkey:XXXXXXX
c:\windows\system32\cscript "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS" /act
goto eof

::Office 2013
:2
set INPUT=
set /P INPUT=Do you want to install Office (1) or just activate it (2)?
If /I "%INPUT%"=="1" goto instalar2013
If /I "%INPUT%"=="2" goto windows2013

:instalar2013
echo Installing Office 2013...
"\\jamaica\sistemas$\Install\~SOFTWARES\Office\Office 2013\setup.exe" /config "\\jamaica\sistemas$\Install\~SOFTWARES\Office\Office 2013\proplus.ww\config.xml"
goto windows2013

:windows2013
if defined ProgramFiles(x86) (
    @echo You're running a x64 system...
    goto 2013x64
) else (
    @echo You're running a x86 system...
    goto 2013x86
)

:2013x86
::Office 2013 Activation (x86)
echo Activating Office 2013...
c:\windows\system32\cscript "C:\Program Files\Microsoft Office\Office15\OSPP.VBS" /inpkey:XXX
c:\windows\system32\cscript "C:\Program Files\Microsoft Office\Office15\OSPP.VBS" /act
goto eof

:2013x64
::Office 2013 Activation (x64)
echo Activating Office 2013...
c:\windows\system32\cscript "C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS" /inpkey:XXXX
c:\windows\system32\cscript "C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS" /act
goto eof

:eof

这是我的批次代码。它所做的就是询问您要安装哪个版本的Office,然后将其激活。或者,如果你愿意,你也可以直接激活它。我想用C#做同样的事情,但只使用C#。我可以创建一个方法来启动批处理文件,但是...我想学习如何在C#中使用CMD命令。这是我的C#类的代码。

代码语言:javascript
复制
/* Office's installers' paths */
string varCaminhoOffice2010 = @"\\romenia\install$\~SOFTWARES\Office\Office 2010\setup.exe";
string varCaminhoOffice2013 = @"\\romenia\install$\~SOFTWARES\Office\Office 2013\setup.exe";

/* Local folders */
string varCaminhoOffice2010x86 = @"C:\Program Files\Microsoft Office\Office14\OSPP.VBS";
string varCaminhoOffice2010x64 = @"C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS";
string varCaminhoOffice2013x86 = @"C:\Program Files\Microsoft Office\Office15\OSPP.VBS";
string varCaminhoOffice2013x64 = @"C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS";

/* Methods */
public void mtdAtivaOffice2010()
{
    /* Office Activation */
    if (mtdCheckArc == false) // Checking system's architecture
    {
        // x86
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2010x86 + "/inpkey:XXXX");
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2010x86 + "/act");
    }
    else
    {
        // x64
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2010x64 + "/inpkey:XXXX");
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2010x64 + "/act");
    }
}

public void mtdAtivaOffice2013()
{
    /* Office activation */
    if (mtdCheckArc == false) // Checking system's architecture
    {
        // x86
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2013x86 + "/inpkey:XXXX");
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2013x86 + "/act");
    }
    else
    {
        // x64
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2013x64 + "/inpkey:XXXX");
        System.Diagnostics.Process.Start("CMD.exe", "/C %systemroot%\system32\cscript" + varCaminhoOffice2013x64 + "/act");
    }
}

每次我尝试运行该项目时,Visual Studio都会给出编译错误消息。我已经尝试了一些方法,并尝试在论坛上搜索帮助,但都没有帮助。我也试过了:

尝试将每个命令设置为变量,然后让方法运行它们:

代码语言:javascript
复制
string varCScript = @"%systemroot%\system32\cscript";
string varSerial2010 = "/inpkey:XXXX";
string varSerial2013 = "/inpkey:XXXX";
string varActivate = "/act";
System.Diagnostics.Process.Start("CMD.exe", "/C" + varCScript + varCaminhoOffice2010x86 + varSerial2010);
System.Diagnostics.Process.Start("CMD.exe", "/C" + varCScript + varCaminhoOffice2010x64 + varSerial2010);
System.Diagnostics.Process.Start("CMD.exe", "/C" + varCScript + varCaminhoOffice2013x86 + varSerial2013);
System.Diagnostics.Process.Start("CMD.exe", "/C" + varCScript + varCaminhoOffice2013x64 + varSerial2013);

还尝试将wole命令作为单个字符串插入:

代码语言:javascript
复制
string varCommand = "%systemroot%\system32\cscript \"C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS\" /inpkey:XXXX";

我还尝试在这最后一行代码中的文件夹之间添加更多的“\”。例如"C:\windows\system32",但都不起作用。有时我会遇到编译错误,有时我的程序会运行...但当CMD窗口打开时,它会闪烁一秒钟,然后消失。我能从其中一篇文章中读到的是“语法问题”。所以,嗯..。看起来CMD没有正确读取我的字符串。我的意思是,我没有正确地声明它们。

EN

回答 1

Stack Overflow用户

发布于 2015-04-09 23:35:22

参数之间需要空格,带空格的参数用引号括起来。

另外,为了获得更多信息:在Process.Start行上放置一个断点,获取脚本和参数,并将它们粘贴到命令窗口中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29542761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档