簡體   English   中英

在C#中執行CMD命令

[英]Execute CMD commands in C#

好吧,在實際提出問題之前,我將簡要介紹一下我要做什么。 我寫了幾批在這里安裝東西,它們工作得很好。 事情是...我想用C#編寫一個與批處理功能相同的程序。 批處理的大部分工作是調用文件,並使用/ S或/ silent之類的參數來觸發它們。 並且,當然,請激活Windows / Office。 但是我在運行Office / Windows激活器時遇到問題。 在下面,您將看到我們使用的批處理的結構以及C#程序的結構。

@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#。 我可以創建一種方法來啟動批處理文件,但是,...我想學習如何使CMD命令在C#中工作。 這是我的C#類的代碼。

/* 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都會向我顯示編譯錯誤消息。 我嘗試了一些操作,並嘗試在論壇上尋求幫助,但沒有任何幫助。 我也嘗試過:

嘗試將每個命令設置為變量,然后使方法運行它們:

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命令作為單個字符串插入:

string varCommand = "%systemroot%\system32\cscript \"C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS\" /inpkey:XXXX";

我還嘗試在文件夾之間的最后一行代碼中添加更多“ \\”。 類似於“ C:\\\\ windows \\\\ system32”,但沒有任何效果。 有時我遇到編譯錯誤,有時我的程序運行...但是當CMD窗口打開時,它閃爍一秒鍾然后消失。 我只能從其中之一讀到的是“語法問題”。 因此,好吧……似乎CMD無法正確讀取我的字符串。 我的意思是,我沒有正確聲明它們。

你們能幫我這個嗎?

您的參數之間需要空格,並在帶有空格的參數周圍加上引號。

另外,要獲取更多信息,請執行以下操作:在Process.Start行上放置一個斷點,獲取腳本和參數,然后將其粘貼到cmd窗口中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM