!@#$%^&* Windows服务执行bat文件出现的问题

止戈而立 2009-01-05 03:33:47
		private string ExcuteBat(string filename)
{
string output="";
Process process = new Process();
process.StartInfo.FileName = filename;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
output=process.StandardOutput.ReadToEnd();
process.Close();
return output;
}
程序里调用ExcuteBat方法执行了bak.bat文件
文件内容如下:
db2cmd /c /w /i db2 BACKUP DATABASE MYDB TO D:\ WITH 2 BUFFERS BUFFER 1024

最后执行结果(即output)是:
C:\WINDOWS\system32>db2cmd /c /w /i db2 BACKUP DATABASE MYDB TO D:\ WITH 2 BUFFERS BUFFER 1024
SQL0567N "SYSTEM"是无效的权限标识。 SQLSTATE=42602


但是不通过程序调用,直接在相应的目录下运行bat文件,可正常备份。还要说明一下,这是在自己写的服务里头调用才会出现这样的错误,在应用程序里头可正常。
帮忙分析下是什么错误?
...全文
374 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
止戈而立 2009-01-06
  • 打赏
  • 举报
回复
找到原因,此服务需要指定一个管理员权限的User进行登录。
还想懒够 2009-01-05
  • 打赏
  • 举报
回复
权限问题,指定一个账户去运行吧
止戈而立 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 GTX280 的回复:]
应该是权限问题。你现在执行BAT文件的是Windows服务,将服务账户改成ServiceAccount.LocalSystem试试
[/Quote]

用的就是这个啊.
GTX280 2009-01-05
  • 打赏
  • 举报
回复
应该是权限问题。你现在执行BAT文件的是Windows服务,将服务账户改成ServiceAccount.LocalSystem试试
dayizhixiaotutu 2009-01-05
  • 打赏
  • 举报
回复
引用 4 楼 gomoku 的回复:

Windows服务运行在LocalSystem帐号下,
数据库可能不允许该帐号的连接。


目前登录操作系统的帐号隶属于Administrators


他说的是服务运行的账户 不是登录操作系统的账户 把服务的账户改成你登陆系统的账户 不知道管不管用
一游 2009-01-05
  • 打赏
  • 举报
回复
用API函数执行这个BAT试试看
止戈而立 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dayizhixiaotutu 的回复:]
服务--》属性--》登录 里面有一个选项 "与桌面交互" 把它勾上试试
[/Quote]

试过,结果依旧。。

[Quote=引用 4 楼 gomoku 的回复:]
Windows服务运行在LocalSystem帐号下,
数据库可能不允许该帐号的连接。
[/Quote]

目前登录操作系统的帐号隶属于Administrators

我在想是不是跟路径“C:\WINDOWS\system32>”有关


查过SQL0567N

db2 => ? SQL0567N

SQL0567N "<权限标识>" 不是有效的权限标识。

解释: 由于下列其中一种原因,由 "<权限标识>" 指定的权限标识无效:

o 它以 "SYS"、"sys"、"IBM"、"ibm"、"SQL" 或 "sql" 开始。

o 它包含除 a 到 z、A 到 Z、0 到 9
及三个特殊字符(#、@、$)以外的字符。

o 它是定界的且包含小写字母。

o 它是 GUESTS、ADMINS、USERS 或 LOCAL。

o 它是在 GRANT 或 REVOKE 语句中的关键字 USER 或 GROUP 之后的
PUBLIC。



不能处理该语句。

用户响应: 校正无效的权限标识。

sqlcode: -567

sqlstate: 42602

  • 打赏
  • 举报
回复
恩,可能跟你当前执行程序的账号有关系,如果你用的windowservice
gomoku 2009-01-05
  • 打赏
  • 举报
回复
Windows服务运行在LocalSystem帐号下,
数据库可能不允许该帐号的连接。
dayizhixiaotutu 2009-01-05
  • 打赏
  • 举报
回复
服务--》属性--》登录 里面有一个选项 "与桌面交互" 把它勾上试试
止戈而立 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tmxk2002 的回复:]
把你的那些路径,用引号引起来,dos下对于空格默认为是参数分隔符,引号引起来才是一个字符串。
MYDB 需要给出具体路径?
[/Quote]
关键是路径并没有空格,这一点我还是比较注意的。。

SQL0567N "SYSTEM"是无效的权限标识。 SQLSTATE=42602
搞不懂这里指的什么权限?
  • 打赏
  • 举报
回复
把你的那些路径,用引号引起来,dos下对于空格默认为是参数分隔符,引号引起来才是一个字符串。
MYDB 需要给出具体路径?

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧