アプリ版:「スタンプのみでお礼する」機能のリリースについて

【理想】
既にSQLServerExpress2005以降(以下SQL)が入っているPCに対して、
SQLの管理者権限がないユーザーがインストーラーを実行した際、
・このユーザーは管理権限がないこと
・管理権限があるユーザーは○○というユーザーなので、○○というユーザーで
ログインし直してからインストールして欲しい
というメッセージを出したい

【現状】
SQLをデータベースとして開発したソフトウェアがあり、

インストーラーを実行すると、SQLと開発したソフトウェアが自動インストールされるようになっています。(既にSQLがインストールされている場合はSQLはインストールしない)
インストーラーは、Inno Setupを利用しています。

ここで問題になっているのが、
既にSQLがインストールされているPCにインストールしてもらった際に、
SQLの管理者ではないユーザーでインストールしようとするとエラーになることです。

ユーザーに上記を伝えて、権限のあるユーザーでやり直してもらって(もしくは一旦SQLをアンインストールして)、再度上記インストーラーを実行してもらう必要があるのですが、権限のあるユーザーが誰か答えられるユーザーがほどんどいません。

今は、インストーラーを実行した際、既にインストールされていれば、
仮のデータベースを作るテストをしてみて、出来ればOK、出来なければ、「インストール出来ないから管理権限のあるユーザーでログインしてほしい」のようなメッセージを出してセットアップを中止するようにしています。

インストーラーを実行した際、管理権限のあるユーザーが誰なのかが分かる方法はないでしょうか。色々試してみたのですが、「管理者権限がない」という応答しか返って来ません。

同様の悩み(対応)は他のソフトでも同様だと思いますが、
どのように解決しているのかを教えて頂ければ助かります。

分かる方ご教授お願い致します。

A 回答 (2件)

「管理者権限のあるユーザーでインストールすること」 という注意だけで済む話だと思うんだけど。


インストーラーがわざわざ 「あなたは管理者権限をもっていません。一度ログオフして xxxx または yyyy または zzzz でログインしてから再度インストーラーを実行してください。」 とか言う?

というか Inno Setup って使ったことないけど設定でセットアップ実行中のユーザーが Admin 権限を持っているか確認できるようにできるんじゃないの?

どうしても実現させたいっていうなら、Inno Setup がプログラムのセットアップよりも前に下のような VBScript を実行するとか。

Option Explicit

Dim userNameList

Dim strComputer
strComputer = "."

Dim objGroup
Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators")

Dim objUser
For Each objUser In objGroup.Members
If objUser.Class = "User" Then
userNameList = userNameList & objUser.Name & vbCrLf
End If
Next

WScript.Echo "このコンピューターの管理者権限を持つユーザー一覧:" & vbCrLf & userNameList


またはコマンドプロンプトで
net localgroup Administrators
とさせるとか。


または net localgroup Administrators をVBScript で実行させるとか。
Set objShell = CreateObject("Wscript.Shell")
strCommand = "net localgroup Administrators"
Set objExec = objShell.Exec(strCommand)
Do Until objExec.Status
Wscript.Sleep 250
Loop
Wscript.Echo objExec.StdOut.ReadAll()

この回答への補足

ありがとうございます。

調べたいのは、SQLのサーバーロールにadmin権限があるユーザーが誰かということです。OSのadminにSQLの管理権限があるとは限らないので困っています。

1台ずつ私たちが出向できればいいのですが、基本はWeb配布なので一般の方が自身でインストールすることになります。

その際に既にSQLがインストールされているPCでこのトラブルが多いので何とかならないかと思い投稿しました。

補足日時:2011/06/29 17:16
    • good
    • 0

sp_helpsrvrolemember というストアド プロシージャを使えば指定したサーバーレベル ロールのメンバーを得ることができます。


VBScript 等で SQL Server にアクセスして上記プロシージャが返すレコードを展開すれば良いかと。

しかしそれなりの権限があるユーザーで実行しないと取得できないと思います。

この回答への補足

回答ありがとうございます。

既にそのプロシージャと同じ情報をSQLで取得するようになっています。

他のSQLServerを利用したソフトウェアはどうやってこのあたりの問題の解決しているのでしょうか。もしくは既にSQLが入っているPCにはインストール不可とかってしてるんでしょうか。。。

補足日時:2011/07/06 16:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!