脚本控制评估

督导

新成员
已加入
2020年10月14日
留言内容
4
编程经验
Beginner
你好,
我是编码方面的初学者,因此,如果我的问题比较简单,请原谅。
我编写了一个应用程序,以读取包含一些变量的文本文件,如下所示:

"Text1" + var1 + "Text2"
"Text3" + var2 + "Text4"
"Text5" + var3 + "Text6"

我使用以下代码:

MSScriptControl.ScriptControl sc =新的MSScriptControl.ScriptControl();
sc。语言="VBSCRIPT";
字符串strAppDir = System.IO.Directory.GetCurrentDirectory();
字符串strFile ="TextFile.txt";
字符串tmpFile = Path.Combine(strAppDir,strFile);
字符串tmpText = File.ReadAllText(tmpFile);

字符串var1 ="string01";
字符串var2 ="string02";
字符串var3 ="string03";

对象结果= sc.Eval(tmpText);
MessageBox.Show(result.ToString());

结果不是我想要的:
Text1Text2
文字3Text4
文字5Text6
这就是我进来的 结果 .

这就是我想要的
Text1String01Text2
文字3String02Text4
文字5String03Text6
变量不包括在结果中。
是否有使用Eval函数的解决方案?

谢谢。感谢任何请求者。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
该脚本对您的VB.NET代码一无所知。它只知道脚本中的内容。您需要在脚本本身中声明并设置这些变量,以使其成为评估的一部分。
 

督导

新成员
已加入
2020年10月14日
留言内容
4
编程经验
Beginner
该脚本对您的VB.NET代码一无所知。它只知道脚本中的内容。您需要在脚本本身中声明并设置这些变量,以使其成为评估的一部分。
感谢您的回复。
我承认我对Scriptcontrol过程不太了解。您能否举一些示例来声明变量并求值?
谢谢你。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
通常,您将如何编写VBScript来完成您想做的事情?这就是您需要在此处执行的操作,因为这就是您要执行的操作。如果您不知道如何编写独立的VBScript,那么这就是您需要学习的知识,但这不是这样做的地方,因为这是VB.NET论坛,而不是VBScript论坛。如果您想学习如何替换包含VBScript代码的字符串中的某些占位符,那么我们可以为您提供帮助,但是无论String包含什么内容,用另一个值替换String中的一个值都是相同的。

解决问题的最重要且经常被忽略的步骤之一就是确定问题所在。编写VBScript是一个问题,而在VB.NET中替换字符串中的占位符则是另一个完全独立的问题。您应该先解决第一个问题,然后再担心第二个问题,正如我所说的,VB.NET论坛不是这样做的地方。
 

督导

新成员
已加入
2020年10月14日
留言内容
4
编程经验
Beginner
通常,您将如何编写VBScript来完成您想做的事情?这就是您需要在此处执行的操作,因为这就是您要执行的操作。如果您不知道如何编写独立的VBScript,那么这就是您需要学习的知识,但这不是这样做的地方,因为这是VB.NET论坛,而不是VBScript论坛。如果您想学习如何替换包含VBScript代码的字符串中的某些占位符,那么我们可以为您提供帮助,但是无论String包含什么内容,用另一个值替换String中的一个值都是相同的。

解决问题的最重要且经常被忽略的步骤之一就是确定问题所在。编写VBScript是一个问题,而在VB.NET中替换字符串中的占位符则是另一个完全独立的问题。您应该先解决第一个问题,然后再担心第二个问题,正如我所说的,VB.NET论坛不是这样做的地方。
正如我提到的,我是一个初学者,对编码没有太多的了解。我在这里问一些我不知道的事情。
我用.NET编写了一个应用程序,但是我包括了Scriptcontrol来模拟Eval函数。
如果您还有其他方法可以导入提到的文本文件并为变量分配值,请告诉我。
谢谢
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
如果您希望能够执行VBScript,那么您需要做的第一件事就是编写VBScript。这是一个C#论坛,因此不是问该怎么做的地方。 C#组件只是将一个字符串的一部分替换为另一个字符串。如果您首先没有该String,则C#部分无关紧要。在拥有该字符串(即有效的VBScript)之前,C#部分是无关紧要的。一旦有了可以正常工作的VBScript,您便有一个问题要问我们。在那之前,您不会。
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
虐待尝试使其更简单。如果要执行VBScript,则需要编写该VBScript。如果希望VBScript中的变量具有值,则需要在脚本中为该变量分配值。如何做到这不是C#的问题。我知道您希望的是,但不是。在您可以使用VBScript之前,问我们如何编写C#代码来运行这样的脚本是一个有争议的问题。
 

督导

新成员
已加入
2020年10月14日
留言内容
4
编程经验
Beginner
虐待尝试使其更简单。如果要执行VBScript,则需要编写该VBScript。如果希望VBScript中的变量具有值,则需要在脚本中为该变量分配值。如何做到这不是C#的问题。我知道您希望的是,但不是。在您可以使用VBScript之前,问我们如何编写C#代码来运行这样的脚本是一个有争议的问题。
这是一个简单的文本文件,而不是VBScript。我想阅读它,并为变量赋值。
但是,如果您不想提供帮助,则感谢您不帮助我。
再见
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
这是一个简单的文本文件,而不是VBScript。我想阅读它,并为变量赋值。
但是,如果您不想提供帮助,则感谢您不帮助我。
再见
恐怕您不了解自己的问题。它是VBScript。您认为这到底在做什么?
C#:
sc。语言="VBSCRIPT";
That explicitly instructs the ScriptControl to interpret the text file you provide as VBScript. I repeat, you need to have working VBScript code in order to execute it. It doesn't matter how much you wish it were otherwise. If you can't write VBScript code that does what you want then you can't execute VBScript code that does what you want. It's not that I don't want to help you. I'm perfectly happy to help you with a C# question. There's a C# question in here but you haven't actually got to the stage that you can ask it because you don't have working VBScript code yet. This forum is not a place to learn how to write VBScript, no matter much you wish it was.
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
It's been years since I've had to deal with IActiveScript. It's niche knowledge that I don't really want to have to try to recall, but a lot of good information can be gleaned from the various Dr. Dobbs articles regarding script hosting.

如上所述,暴力破解仅是进行一些字符串替换。

下一个最佳解决方案是让脚本引擎读取VB脚本字符串(在其中设置值),然后在该字符串中继续执行用户脚本的操作。

The most elegant solution is to implement IActiveScriptSite::GetItemInfo() and give back an interface which returns the values of various variables/symbols which the script engine cannot resolve. This is the approach I took many years ago because of the dynamic nature of what we needed in our project.

顺便说一句,在2000年代初,仅读取该文本文件并对其进行评估或执行就不会使任何人回头。如今,这将引起各种安全问题。您怎么知道没有人在该文件中注入恶意代码?
 
最佳 底部