
現在、Windows XP Pro、SQL Server2005 Developer Editionで開発を行っています。
行いたいことは、DMLトリガによって入力画面のあるプログラム(例えばメモ帳など)を実行したいと思っているのですが、下記のサイトで調べた結果、xp_cmdshellではできそうもありません。
そこで、どうにかして入力画面のあるプログラムを実行したいと思っているのですが、なかなか見つからず困っています。
(セキュリティに関しては、無問題とします。)
SQL Server 2005でこのようなプログラムを作成できますか?
また、どのようにすれば良いでしょうか?
具体的なソース、参考サイト等ありましたら、教えてください。
よろしくお願いします。
参考サイト:http://support.microsoft.com/kb/323411/ja
No.4ベストアンサー
- 回答日時:
本来の質問からは相当乖離しているような気がしてきましたが。
。コンソールアプリケーションはその環境であれば動くはずです。
ファイルの書き出し先をマイドキュメントにしているようですが、C:\Tempなど普通のフォルダを指定して試してみてください。
SQL Serverがxp_cmdshellを実行するとき、質問者さんのユーザIDの権限で実行すると思っていませんか?
何も考えないでインストールしたのだったら、おそらくローカルシステムアカウントで実行されます。そのフォルダにアクセスする権限がなければファイルは書き出せません。
#念のため、ちなみに書かれていたものをコピペして、フォルダを変更してコンソールアプリケーションにして実行してみたら、ファイルは書き出されました。
jamshid6様
当初の質問からかなりずれてしまったにも拘らずご丁寧なアドバイスをありがとうございました。
おっしゃったとおり、フォルダの権限がなかったために書き込まれていないだけでした。
これからはもう少し調べて、どうしても分からなかったら質問しようと思います。
本当に長い間お世話になりました。ありがとうござます。
No.3
- 回答日時:
サーバ処理とクライアント処理は別物だと思ってください。
SQL Serverでxp_cmdshellを実行させるということは、当然SQL Serverのあるサーバで処理が走ることになりますから、サーバのローカルドライブを見にいきます。
質問者さんはSQL Serverに接続して実行の指示をしているだけに等しいのです。
やはりEXEは了承を得てサーバに置くか、クライアント処理させたければSQL Serverにやらせるのはあきらめた方がいいです。
そもそもアプローチ的に変なので以下は余談として見てほしいのですが、SQL Serverのあるサーバが質問者さんの端末にドライブマップしてネットワーク経由でexeを叩いたとすれば、そのexeは動くと思います。
しかし、モジュールがどこにあろうが実行はサーバで行われます。
質問者さんのexeがサーバで正常に動くことが確認できていない状態でそれを試すのはやめた方がいいと思いますよ。ハングしてもサーバにアクセスできないんですよね?
大変失礼しました。
自分のPCにもDBが作れることを知らなかったので、サーバ処理でストアドを作っていましたが、自分のPCにもDBを作って再度試してみまた。
jamshid6様のおっしゃるEXEファイルをPCに置くことでストアドの処理自体は正常に終了したとでます。(メッセージにSuccess)
しかし、肝心のProgram.exeが動いてないようなのです。
Program.exeはVB2005のコンソールアプリケーションとして作成し、下記のようなコードを適当に作ってみました。(VSの方で実行し正しく動くことを確認)
Module Module1
Sub Main()
Dim FileName As String = "C:\Documents and Settings\***\My Documents\SutoadoTest.CSV"
Dim Code As String = "Shift-JIS"
Dim Message As String = "テステス"
Dim Num As Integer = 1234567890
Dim Join As String
Dim Writer As IO.StreamWriter
Dim Encode As System.Text.Encoding
Join = Message & "," & Num
Encode = System.Text.Encoding.GetEncoding(Code)
Writer = New IO.StreamWriter(FileName, true, Encode)
Writer.WriteLine(Join)
Writer.Close()
End Sub
End Module
入力画面等のないアプリケーションなら動くかと思っていたのですが、コンソールアプリケーションでも動かないのでしょうか?
もし、動かないのでしたら、いったい何なら動くのでしょうか?
度々質問ばかりで申し訳ありません。
よろしくお願いいたします。
No.2
- 回答日時:
Developer Editionということなので、ローカル接続でやっているのかと思っていましたが、もしかしてリモート接続(SQL Serverは別のPCかサーバにある)ですか?
そのメッセージは、通常その場所にExeがないときに返されます。
SQL Serverの動いているPCかサーバに「Program.exe」を置いていますか?
説明不足ですみません。
SQL Serverは別のサーバにあります。
デスクトップPCの方で、VB2005でProgram.exeを作りCドライブ直下に置きました。
もしかして、ストアドでC:\Program.exeとするとサーバの方のCドライブを見てしまうのでしょうか…?
現在、研修の関係でサーバの中身を見ることが出来ないのですが、ストアドの実行をデスクトップPCの方のCドライブにすることはできないのでしょうか?
また、作ったexeファイルの出力先もCドライブ直下にしたのですが、これもサーバ側のCドライブになってしまうのでしょうか?
何度も質問ばかりして申し訳ございません。
No.1
- 回答日時:
>DMLトリガによって入力画面のあるプログラム(例えばメモ帳など)を実行したい
そこまで考える人がいるとはちょっと感動しました。
結論からいくとできないと思います。
・SQL Serverから直接他のプログラムを起動する方法はxp_cmdshellとCLRだけですが、いずれもInteractiveな動きはサポートしないようです。xp_cmdshellだとプロセスをKillするまで永遠に待ちに入ってしまいます。CLRでも試してみましたが、NOTEPAD.exeを起動して正常終了はしますが、なにぶん起動しているのがSQL Serverなので自分の画面には帰ってきません。これは偽装しても同じ結果でした(結局、タスクマネージャからKillするしかないのですが)
それ以前の問題として、
・リモートのSQL Serverではそもそもできないアプローチです。
・更新処理というのはトリガも含めて正常終了したときに初めてCommitがかかるものなので、DMLトリガにこのようなものを仕込むとおそらくトランザクションがロックされてしまうでしょう。
所詮SQL Serverもデータベースですので、この仕組みは更新処理を掛けるアプリケーション側で実装するようお勧めしておきます。
早速のご回答ありがとうございます。
やはり、出来ませんか・・・。
これとはまた別の質問になってしまうのですが、PDFを出力するEXEファイル(VB2005で作成)をxp_cmdshellで実行することはできますか?
このEXEには入力画面はなくフォームロードに出力をして閉じています。
SQL Serverからストアドプロシージャを通して実行してみたのですがエラーがでてきてしまって、どうしたらいいのか困っています。
EXEファイルは正常に実行できますので、問題はストアドのほうだと思うのですが、よくわかりません。
下記にストアドのソースを載せるので、見てもらえないでしょうか?
ALTER PROCEDURE [dbo].[OUTSIDE_PROGRAM]
AS
BEGIN
DECLARE @result int
EXEC @result = master.dbo.xp_cmdshell 'C:\Program.exe'
IF (@result = 0)
PRINT 'Success'
ELSE
PRINT 'Failure'
RETURN @result
END
これを実行すると、結果欄には
1 'C:\Program.exe' は、内部コマンドまたは外部コマンド、
2 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
3 NULL
と表示されてしまい、EXEが実行されていませんでした。
ただ、手動でコマンドプロンプトを開き、C:\Program.exeを実行すると
しっかり動いています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- Windows 10 VirtualBox からWindows XP を起動すると画面が真っ暗になってしまいました 4 2023/07/09 16:19
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Windows Vista・XP windows xp proが起動しなくなりました 10 2022/05/20 00:49
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- PHP 掲示板を資料を参考にして開発中ですが、画像がアップされません? 1 2022/11/21 06:44
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
バッチからSQLCMDを実行する方法
-
ユーザー定義関数内でのsp_exec...
-
SQLサーバーのジョブでのexeフ...
-
SQLServerのジョブからバッチを...
-
SQLCMDにて教えていただきたい...
-
オラクルインストールユーザ以...
-
ストアドの速度がクエリの30...
-
accessでSQLをファイルから実行...
-
Excelフィルタ抽出で「検索して...
-
バッチでのSQL実行結果の分岐処...
-
WHERE句の?
-
DTexec でSSISパッケージを実行...
-
Access2010のマルチコアCPUへの...
-
静的SQL、動的SQL?
-
Accessの編集VBE?
-
Accessに音楽をつけることって...
-
Accessからストアドプロシジャ...
-
データベース SQL のセッショ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
SQLCMDにて教えていただきたい...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
バッチでのSQL実行結果の分岐処...
-
ストアドの速度がクエリの30...
-
SQLServerのジョブからバッチを...
-
SQLServer2005のストプロでxp_c...
-
100万件レコードdelete
-
Excelフィルタ抽出で「検索して...
-
同じSQL文で速度がだいぶ違う
-
SQLサーバーのジョブでのexeフ...
-
ユーザー定義関数内でのsp_exec...
-
SQL-Loaderが動かないです。
-
sqlcmdでクエリの実行結果をバ...
-
データベース SQL のセッショ...
-
バッチからメンテナンスプラン...
-
アクションクエリが実行できない
-
オラクルインストールユーザ以...
-
xp_cmdshellについて
-
【Oracle】ADOでSELECT * FROM ...
おすすめ情報