我简单分析了一下.应该是在mssql 线程空间不允许有其它 进程
我现在还有什么办法能触发外部程序
期待有人帮一下
15 个解决方案
#1
结帖率:100.00% 都没人顶一下。。真伤心
#2
?這要看是怎樣的操作
xp_cmdshell--調用的語句是SQL Server操作,還是系統操作?
xp_cmdshell--調用的語句是SQL Server操作,還是系統操作?
#3
Exec xp_cmdshell 'E:\debug\DBToIM.exe'
这个程序(DBToIM.exe)的作用是登陆openfire 然后发信息
但运行没有结果。
而我双击运行时是可以正常运行的。
通过xp_cmdshell 就失效了
这个程序(DBToIM.exe)的作用是登陆openfire 然后发信息
但运行没有结果。
而我双击运行时是可以正常运行的。
通过xp_cmdshell 就失效了
#4
#6
這是不行的,不可以在觸發器里調用windows程序
樓主可用CLR寫觸發器試試
樓主可用CLR寫觸發器試試
#7
Exec xp_cmdshell 'Start E:\debug\DBToIM.exe'
是一下这个
是一下这个
#8
楼上的呢
xp_cmdshell 'dir *.exe'
这个在mssql 的线程中是安全的。
而我的程序mssql 不会确认是绝对安全的。会影响 mssql 程序的运行。
所以mssql 执行xp_cmdshell 调用我的程序。应该做了处理。不会正常运行结果
而ls 所讲的帮助文档我看过了。 我确认我也会使用这个命令。你有可以的话可以试试自己写个程序。这个程序 可以开个线程 去做些事情。然后你可以 在触发器中调用这个函数。你看看会不会有一些效果。
谢谢你的帮助。
xp_cmdshell 'dir *.exe'
这个在mssql 的线程中是安全的。
而我的程序mssql 不会确认是绝对安全的。会影响 mssql 程序的运行。
所以mssql 执行xp_cmdshell 调用我的程序。应该做了处理。不会正常运行结果
而ls 所讲的帮助文档我看过了。 我确认我也会使用这个命令。你有可以的话可以试试自己写个程序。这个程序 可以开个线程 去做些事情。然后你可以 在触发器中调用这个函数。你看看会不会有一些效果。
谢谢你的帮助。
#9
Exec xp_cmdshell 'start E:\debug\DBToIM.exe'
不可以
不可以
#10
to wxf163
(小小菜)
你可以这样试试看。看看自己点击这个程序和 触发器运行这个程序。计算机的反应
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport ( "user32.dll", EntryPoint = "FindWindow", SetLastError = true )]
private static extern IntPtr FindWindow( string lpClassName, string lpWindowName );
[DllImport ( "user32.dll", EntryPoint = "FindWindowEx", SetLastError = true )]
private static extern IntPtr FindWindowEx( IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow );
[DllImport ( "user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto )]
private static extern int SendMessage( IntPtr hwnd, uint wMsg, int wParam, int lParam );
[DllImport ( "user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true )]
private static extern void SetForegroundWindow( IntPtr hwnd );
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
const uint BM_CLICK = 0xF5; //鼠标点击的消息,对于各种消息的数值,API手册
IntPtr hwndCalc = FindWindow ( null, "计算器" ); //查找计算器的句柄
if ( hwndCalc != IntPtr.Zero )
{
IntPtr hwndThree = FindWindowEx ( hwndCalc, 0, null, "3" ); //获取按钮3 的句柄
IntPtr hwndPlus = FindWindowEx ( hwndCalc, 0, null, "+" ); //获取按钮 + 的句柄
IntPtr hwndTwo = FindWindowEx ( hwndCalc, 0, null, "2" ); //获取按钮2 的句柄
IntPtr hwndEqual = FindWindowEx ( hwndCalc, 0, null, "=" ); //获取按钮= 的句柄
SetForegroundWindow ( hwndCalc ); //将计算器设为当前活动窗口
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndThree, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndPlus, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndTwo, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndEqual, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 );
}
else
{
}
}
(小小菜)
你可以这样试试看。看看自己点击这个程序和 触发器运行这个程序。计算机的反应
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport ( "user32.dll", EntryPoint = "FindWindow", SetLastError = true )]
private static extern IntPtr FindWindow( string lpClassName, string lpWindowName );
[DllImport ( "user32.dll", EntryPoint = "FindWindowEx", SetLastError = true )]
private static extern IntPtr FindWindowEx( IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow );
[DllImport ( "user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto )]
private static extern int SendMessage( IntPtr hwnd, uint wMsg, int wParam, int lParam );
[DllImport ( "user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true )]
private static extern void SetForegroundWindow( IntPtr hwnd );
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
const uint BM_CLICK = 0xF5; //鼠标点击的消息,对于各种消息的数值,API手册
IntPtr hwndCalc = FindWindow ( null, "计算器" ); //查找计算器的句柄
if ( hwndCalc != IntPtr.Zero )
{
IntPtr hwndThree = FindWindowEx ( hwndCalc, 0, null, "3" ); //获取按钮3 的句柄
IntPtr hwndPlus = FindWindowEx ( hwndCalc, 0, null, "+" ); //获取按钮 + 的句柄
IntPtr hwndTwo = FindWindowEx ( hwndCalc, 0, null, "2" ); //获取按钮2 的句柄
IntPtr hwndEqual = FindWindowEx ( hwndCalc, 0, null, "=" ); //获取按钮= 的句柄
SetForegroundWindow ( hwndCalc ); //将计算器设为当前活动窗口
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndThree, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndPlus, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndTwo, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndEqual, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 );
}
else
{
}
}
#11
实在不懂c++哦美女
#12
CLR....
#13
实在不懂c++哦美女
#14
是这样的。最后采用管道在两进程通信解决些问题。
谢谢大家。 以后有人遇到些问题。请参考管道通信
谢谢大家。 以后有人遇到些问题。请参考管道通信
#15
xp_cmdshell只能调用bat com之类的控制台应用程序,无法调用exe所以,执行不成功!
#1
结帖率:100.00% 都没人顶一下。。真伤心
#2
?這要看是怎樣的操作
xp_cmdshell--調用的語句是SQL Server操作,還是系統操作?
xp_cmdshell--調用的語句是SQL Server操作,還是系統操作?
#3
Exec xp_cmdshell 'E:\debug\DBToIM.exe'
这个程序(DBToIM.exe)的作用是登陆openfire 然后发信息
但运行没有结果。
而我双击运行时是可以正常运行的。
通过xp_cmdshell 就失效了
这个程序(DBToIM.exe)的作用是登陆openfire 然后发信息
但运行没有结果。
而我双击运行时是可以正常运行的。
通过xp_cmdshell 就失效了
#4
#5
#6
這是不行的,不可以在觸發器里調用windows程序
樓主可用CLR寫觸發器試試
樓主可用CLR寫觸發器試試
#7
Exec xp_cmdshell 'Start E:\debug\DBToIM.exe'
是一下这个
是一下这个
#8
楼上的呢
xp_cmdshell 'dir *.exe'
这个在mssql 的线程中是安全的。
而我的程序mssql 不会确认是绝对安全的。会影响 mssql 程序的运行。
所以mssql 执行xp_cmdshell 调用我的程序。应该做了处理。不会正常运行结果
而ls 所讲的帮助文档我看过了。 我确认我也会使用这个命令。你有可以的话可以试试自己写个程序。这个程序 可以开个线程 去做些事情。然后你可以 在触发器中调用这个函数。你看看会不会有一些效果。
谢谢你的帮助。
xp_cmdshell 'dir *.exe'
这个在mssql 的线程中是安全的。
而我的程序mssql 不会确认是绝对安全的。会影响 mssql 程序的运行。
所以mssql 执行xp_cmdshell 调用我的程序。应该做了处理。不会正常运行结果
而ls 所讲的帮助文档我看过了。 我确认我也会使用这个命令。你有可以的话可以试试自己写个程序。这个程序 可以开个线程 去做些事情。然后你可以 在触发器中调用这个函数。你看看会不会有一些效果。
谢谢你的帮助。
#9
Exec xp_cmdshell 'start E:\debug\DBToIM.exe'
不可以
不可以
#10
to wxf163
(小小菜)
你可以这样试试看。看看自己点击这个程序和 触发器运行这个程序。计算机的反应
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport ( "user32.dll", EntryPoint = "FindWindow", SetLastError = true )]
private static extern IntPtr FindWindow( string lpClassName, string lpWindowName );
[DllImport ( "user32.dll", EntryPoint = "FindWindowEx", SetLastError = true )]
private static extern IntPtr FindWindowEx( IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow );
[DllImport ( "user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto )]
private static extern int SendMessage( IntPtr hwnd, uint wMsg, int wParam, int lParam );
[DllImport ( "user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true )]
private static extern void SetForegroundWindow( IntPtr hwnd );
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
const uint BM_CLICK = 0xF5; //鼠标点击的消息,对于各种消息的数值,API手册
IntPtr hwndCalc = FindWindow ( null, "计算器" ); //查找计算器的句柄
if ( hwndCalc != IntPtr.Zero )
{
IntPtr hwndThree = FindWindowEx ( hwndCalc, 0, null, "3" ); //获取按钮3 的句柄
IntPtr hwndPlus = FindWindowEx ( hwndCalc, 0, null, "+" ); //获取按钮 + 的句柄
IntPtr hwndTwo = FindWindowEx ( hwndCalc, 0, null, "2" ); //获取按钮2 的句柄
IntPtr hwndEqual = FindWindowEx ( hwndCalc, 0, null, "=" ); //获取按钮= 的句柄
SetForegroundWindow ( hwndCalc ); //将计算器设为当前活动窗口
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndThree, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndPlus, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndTwo, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndEqual, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 );
}
else
{
}
}
(小小菜)
你可以这样试试看。看看自己点击这个程序和 触发器运行这个程序。计算机的反应
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport ( "user32.dll", EntryPoint = "FindWindow", SetLastError = true )]
private static extern IntPtr FindWindow( string lpClassName, string lpWindowName );
[DllImport ( "user32.dll", EntryPoint = "FindWindowEx", SetLastError = true )]
private static extern IntPtr FindWindowEx( IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow );
[DllImport ( "user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto )]
private static extern int SendMessage( IntPtr hwnd, uint wMsg, int wParam, int lParam );
[DllImport ( "user32.dll", EntryPoint = "SetForegroundWindow", SetLastError = true )]
private static extern void SetForegroundWindow( IntPtr hwnd );
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
const uint BM_CLICK = 0xF5; //鼠标点击的消息,对于各种消息的数值,API手册
IntPtr hwndCalc = FindWindow ( null, "计算器" ); //查找计算器的句柄
if ( hwndCalc != IntPtr.Zero )
{
IntPtr hwndThree = FindWindowEx ( hwndCalc, 0, null, "3" ); //获取按钮3 的句柄
IntPtr hwndPlus = FindWindowEx ( hwndCalc, 0, null, "+" ); //获取按钮 + 的句柄
IntPtr hwndTwo = FindWindowEx ( hwndCalc, 0, null, "2" ); //获取按钮2 的句柄
IntPtr hwndEqual = FindWindowEx ( hwndCalc, 0, null, "=" ); //获取按钮= 的句柄
SetForegroundWindow ( hwndCalc ); //将计算器设为当前活动窗口
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndThree, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndPlus, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndTwo, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 ); //暂停2秒
SendMessage ( hwndEqual, BM_CLICK, 0, 0 );
System.Threading.Thread.Sleep ( 2000 );
}
else
{
}
}
#11
实在不懂c++哦美女
#12
CLR....
#13
实在不懂c++哦美女
#14
是这样的。最后采用管道在两进程通信解决些问题。
谢谢大家。 以后有人遇到些问题。请参考管道通信
谢谢大家。 以后有人遇到些问题。请参考管道通信
#15
xp_cmdshell只能调用bat com之类的控制台应用程序,无法调用exe所以,执行不成功!