2017-11-14 11 views
1

私のプログラム用のこの更新ツールがあります。ツールは、このコード(vbとsql)でSQL Serverデータベースを更新します。RESTORE SQL Serverのc: users directoriesの.bakファイル

Dim sql As Process = Process.Start("sqlcmd.exe", Param + " -i update.sql -o log.txt") 

Paramは、とりわけ.bakファイルmyprogram_update.bakの名前が含まれています。

RESTORE DATABASE [myprogram_tmp] 
FROM DISK = N'$(db_src)' 
WITH FILE = 1, 
MOVE N'myprogram_tmp' TO @mdf, 
MOVE N'myprogram_tmp_log' TO @ldf, 
NOUNLOAD, STATS = 5 

@mdf@ldf

update.sql開始は、SQL Serverの設定から読み込まれ、標準のパスです。

更新ツールは、お客様に出荷されており、通常、SQLサーバーは、ウィンドウのユーザーディレクトリ(DesktopまたはDownloadsなど)で読み取ることができないという問題があります。しかし、多くの顧客はアーカイブをこれらのディレクトリに解凍してから、このエラーを受け取ります。

myprogram_update.bak/access deniedにアクセスできませんでした。

すべてのカスタマーサーバーの設定を変更できないため、これらのディレクトリで動作させる方法はありますか?私の考えの1つは、最初にセットアップを実行し、それをprogram filesに解凍することでしたが、スマートな解決策があるかもしれません。

編集:ツールは管理者モードで実行されます。

+1

はDACPACまたはBACPACとして変更および/または初期データベースを出荷することを検討してください。展開するには、SQL Server自体に対するアクセス許可のみが必要です。限られた量のデータしかこの方法でサポートされませんが、スクリプトによるリストアよりも便利です(DACPACのプログラムによるデプロイの呼び出しはDacFxでサポートされています)。データベースプロジェクトは一般的に、バージョニングを完全にサポートするため、大きな勝利を収めています。 –

答えて

0

あなたは標高を求めると、管理者アカウントとして実行する必要があり、多分これは役立ちます:

http://www.downloadinformer.com/how-to-make-a-vb-net-application-always-run-in-administrator-mode/

+0

アプリケーションは、常に管理者モードで常に実行されます。更新自体はうまく動作し、 'UPDATE'や' ALTER'のSQL部分もうまく動作します。しかし 'RESTORE'は' Desktop'では失敗しますが、 'c:\ temp'では動作します。 – user1673665

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 [レビューの投稿](レビュー/低品質の投稿/ 17943703) –

+0

いいえ、これは役に立ちません。管理者であっても、リモートのSQL Serverマシンからローカルユーザーのディスクドライブにアクセスすることはできません。 –

関連する問題