質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

2回答

4662閲覧

VBAのShell関数からPostgreSQLのODBCドライバをサイレントインストールする方法

jm1156

総合スコア866

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

1クリップ

投稿2016/07/04 04:09

Excel2010のVBAで共有サーバー上にあるPostgreSQLのODBCドライバを
サイレントインストールさせようと思っています。

Shell関数を使用して、下記のようにしましたが、
インストールされません。
C:\Windows\System32\msiexec.exe /i \192.168.1.1\common\driver\psqlodbc_x64.msi /quiet

下記のように引数追加して、ログファイルを取得してみると、
/Lime C:\Users\username\Documents\logfile.txt
ログファイル内に以下のメッセージが記録されていました。

You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation.

どうやら管理者権限で実行しないとエラーになるよう??です。

ぐぐってみると引数に /a で管理者でできるようなのですが、
やってみるとインストールされませんでした。
https://msdn.microsoft.com/ja-jp/library/cc759262(v=ws.10).aspx

どうすればmsiecex.exeをShell関数から管理者権限で実行することはできるでしょうか?

理想はユーザー側の画面になにも表示させることなく、インストールを行いたいです。
一応、社内システムなので、社内のセキュリティ的には問題ないのですが、
OSの仕様としては、そんなこっそりインストールさせるわけにはいかない、といったところでしょうか?

環境は以下の通りです。
Excel 2010もしくは2007のVBA
Windows7
PostgreSQL 9.5

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

いわゆる、権限の昇格が必要かと思います。
昨今のOSはセキュリティが強化されていますので、完全なサイレントはVBAからだと難しいのでは?と思います。

Excelそのものを管理者権限で実行するか、
ExcelVBAの中で、権限昇格のPGを書くか・・・

それ以外にも、インストーラーに製造元の信頼情報として署名が入っているか・・・などなど
クリアしなければいけない条件が他にもありそうな気がします。

投稿2016/07/04 06:10

MasafumiOkamoto

総合スコア254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jm1156

2016/07/04 07:07

コメントありがとうございます。 やはり完全なサイレントは厳しいですかね・・・。 それができたらセキュリティ上に問題ありそうですもんね。
guest

0

Excel自体を管理者権限で実行しないといけないとか(推測)

投稿2016/07/04 04:22

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jm1156

2016/07/04 05:05

ユーザーにExcelを管理者権限で実行させるのはちょっと難しいです・・・。
ttyp03

2016/07/04 05:13

shellで直接msiexecを実行するのではなく、msiexecのショートカットを作っておいて、それをshellで実行するのはどうでしょうか。 もちろんショートカットの設定には、[管理者として実行]にチェックを付けておきます。 (ショートカットのプロパティ→[ショートカット]タブ-[詳細設定]-[管理者として実行])
jm1156

2016/07/04 06:14

やってみましたが、 UACのダイアログが表示されます。 「はい」を選べばインストールできますが、 これを非表示にすることはできますか? さすがに無理ですかね・・・(^_^;)
ttyp03

2016/07/04 06:37

少し調べてみましたが、タスクスケジューラーを使う方法でなんとかなるかもしれません。 http://qiita.com/wakky8639/items/7125f33845315d81e4bb 全てバッチファイルで処理できそうなので、やってみる価値はあるかもしれません。
jm1156

2016/07/04 07:04

ありがとうございます。 しかし、今度は 「タスクスケジューラへの登録」&「[全般-最上位の特権で実行する]にチェックを入れる」をVBAで行う方法が見つからないです・・・(;´Д`)
ttyp03

2016/07/04 07:21 編集

こちらを参考に。 http://qiita.com/minamijoyo/items/8cdb1b3659c703f60969 まとめますと、バッチファイルが2つ必要です。 1、msiexecを実行するバッチファイル  質問内容に書いてあるコマンドを登録しておく。 2、1をタスクスケジューラに登録するためのバッチファイル  (1)1のバッチをタスクスケジューラーに登録(schtasks.exe /Create)  (2)(1)のタスクを実行(schtasks.exe /Run)  (3)(1)のタスクを削除(schtasks.exe /Delete) VBAからは2のバッチファイルをshellで実行する。 で、どうでしょう。 schtasks.exeのそれぞれの詳細オプションはお調べください。
jm1156

2016/07/04 07:25

おぉおお、ありがとうございます。感謝です(T_T) ちょっとやってみます。
jm1156

2016/07/04 08:25

やってみました。 がっ、(;´Д`) どうやら、 schtasks /create の実行で「アクセスが拒否されました」と表示されます。 どうやらcreateを実行するために、管理者権限が必要なようです。 /deleteも同じくできませんでした。 手動でタスクを登録して、schtasks /runで実行することだけはできました。 結局VBAのShellからBATを実行するときに管理者権限が必要となり、 そのためにUACのダイアログがでるといったかんじです。 迷宮入りですかねぇ・・・(^_^;)
ttyp03

2016/07/04 08:28

そうしたらまたショートカットの応用で、2のバッチファイルのショートカットを作成して、管理者権限の設定をしてって感じでどうなりますかね。 shellではこのショートカットを起動する感じ。 試行錯誤な感じで申し訳ないです。
jm1156

2016/07/04 08:36

重ね重ねありがとうございます。 ショートカットを作って管理者権限にチェックで実行してみましたが、 やはりUACのダイアログがでますね・・・(^_^;) 最初のパターンと同じです。
ttyp03

2016/07/04 09:42

考えてみればそうですね。。。 お手数かけてしまいました。 すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問