通过C#应用程序运行VBS时出错

时间:2018-10-01 10:06:19

标签: c# vbscript

我希望我的C#应用​​程序运行外部vbscript。该Vbs正在执行某些操作,并且需要从注册表中检索数据。

vbscript已启动,但出现一个错误:无法打开注册表值进行读取。

我不太明白为什么。

这就是我运行vbscript的方式:

            Process scriptProc = new Process();
            scriptProc.StartInfo.FileName = @"c:\windows\system32\wscript";
            scriptProc.StartInfo.WorkingDirectory = repository + p + "\\"; <-- location of my script : C:\temp\soft\
            scriptProc.StartInfo.Arguments = "MyScript.vbs";
            scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            scriptProc.StartInfo.Verb = "runas";
            scriptProc.Start();
            scriptProc.WaitForExit();
            scriptProc.Close();

在我的VBS中,我读取了这样的值:

strValue = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MyKey\MySubKey\MyReg_Sz_Entry")

其中“ MyReg_Sz_Entry”包含字符串值。我正常运行vb时正确返回了该值,但没有使用C#代码。

我的帐户具有管理权限。

我需要一些帮助:)。

谢谢

2 个答案:

答案 0 :(得分:0)

我终于发现了什么问题...

这很简单:我构建的目标体系结构。

我在项目的Visual Studio选项中将其从“任何CPU”更改为“ 64位”,现在可以了。

非常感谢您的帮助。

答案 1 :(得分:-2)

因此,我继续自己进行了测试。根据您的需要进行更改。

从powershell窗口

_12

Results

d:\ coding \ c-sharp \ script.vbs

 _2|_10|_12|
+------+---+---+
|yearID|  H| 3B|
|  2004|  0|  0|
|  2006|  0|  0|
|  2007|  0|  0|
|  2008|  0|  0|
|  2009|  0|  0|
|  2010|  0|  0|
|  1954|131|  6|
|  1955|189|  9|
|  1956|200| 14|
|  1957|198|  6|
|  1958|196|  4|
|  1959|223|  7|
|  1960|172| 11|
|  1961|197| 10|
|  1962|191|  6|
|  1963|201|  4|
|  1964|187|  2|
|  1965|181|  1|
|  1966|168|  1|
|  1967|184|  3|
|  1968|174|  4|
|  1969|164|  3|
|  1970|154|  1|
|  1971|162|  3|
|  1972|119|  0|
|  1973|118|  1|
|  1974| 91|  0|
|  1975|109|  2|
|  1976| 62|  0|

d:\ coding \ c-sharp \ run.cs

csc run.cs
.\run.exe