CLR函数执行Windows批处理文件 [英] CLR Function executes a Windows Batch file

查看:95
本文介绍了CLR函数执行Windows批处理文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

希望您能对我的问题有所了解.我部署到Sql Server 2005数据库中的CLR函数除返回零值外不执行任何操作,可以干净地执行.当我尝试执行其中包含一行的Windows批处理文件时(dir> c:\ t-ware \ dirlist.txt),出现以下错误:

消息6522,第16级,状态1,程序RunVIIMPORT,第0行
用户定义的例程或聚合"RunVIIMPORT"的执行过程中发生了.NET Framework错误:
System.Security.SecurityException:请求失败.
System.Security.SecurityException:
在T_Ware_SQL.Utilities.RunMAS90BatchFile()
在T_Ware_SQL.StoredProcedures.RunVIIMPORT()

执行批处理文件的VB代码行是:System.Diagnostics.Process.Start(" d:\ t-ware \ mytest.bat)

另外,执行以下操作具有相同的结果:System.Diagnostics.Process.Start("dir> test.txt")

(我需要执行一个MAS90 Visual Integrator作业,并且它可以从批处理文件工作...只需要能够从Sql Server执行批处理文件即可.)

如果您能提供任何帮助,将不胜感激.谢谢杰夫.

Was hoping you could shed some insight into my problem. My CLR function that I deployed to my Sql Server 2005 database executes cleanly when it does nothing except return a value of zero. When I have it try to execute a Windows Batch file that has a single line in it (dir > c:\t-ware\dirlist.txt) I get the following error:

Msg 6522, Level 16, State 1, Procedure RunVIIMPORT, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "RunVIIMPORT":
System.Security.SecurityException: Request failed.
System.Security.SecurityException:
at T_Ware_SQL.Utilities.RunMAS90BatchFile()
at T_Ware_SQL.StoredProcedures.RunVIIMPORT()

The VB line of code to execute the batch file is: System.Diagnostics.Process.Start(""d:\t-ware\mytest.bat")

Also, did the following with the same results: System.Diagnostics.Process.Start("dir > test.txt")

(I need to execute a MAS90 Visual Integrator job and it works from a batch file...just need to be able to execute the batch file from Sql Server...)

If you could provide any help, it would be greatly appreciated. Thanks, Jeff.

推荐答案

再也没有"DOS批处理文件"这样的东西了!对于不存在的问题,我们还要等多久才能看到这样的问题.
批处理文件是批处理文件;它们中没有DOS.顺便说一下,与DOS时间相比,语法变得更加先进.批处理变得相当容易(例如,现在有程序).

现在,您无需运行此过程.运行外部进程只能作为不得已的手段.您需要在应用程序代码中获取文件:

There is no such thing as "DOS Batch file" anymore! How much longer shall we see such questions about something which does not exist.
Batch files are batch files; there is nothing of DOS in them. By the way, the syntax became more advanced compared to DOS time; writing batch became considerably easier (for example, there are procedures now).

Now, you don''t need to run this Process. Running external processes can be used only as a last resort. You need to get the files in your application code:

string[] files = System.IO.Directory.GetFiles(myDirectory);



有关其他选项,请参见其他重载的System.IO.Directory.GetFiles方法:
http://msdn.microsoft.com/en-us/library/07wt70x2.aspx [ ^ ].

切勿使用"d:\t-ware\mytest.bat"之类的硬编码立即数.您将如何维护它们?特别是,所有目录都应根据您的条目组装位置和/或配置数据计算得出.

—SA



For other options, please see other overloaded System.IO.Directory.GetFiles methods:
http://msdn.microsoft.com/en-us/library/07wt70x2.aspx[^].

Never use hard-coded immediate constants like "d:\t-ware\mytest.bat". How would you maintain them? In particular, all directories should be calculated our of your entry assembly location and/or configuration data.

—SA


这篇关于CLR函数执行Windows批处理文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆