訳あって、他の製品のアプリケーションを起動するプログラムを作っています。

そこで、アプリケーションのインストール先(パス)を取得する方法はないでしょうか?
(たとえば、EXCELだとF:\Program Files\Microsoft Office\Office\EXCEL.EXE)

APIなどでも調べてみたのですが、見あたりません。フォームを持たないプログラムなので、可能なら自動的に調べてパスを特定したいと考えています。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

レジストリにアクセスするしか方法が無いと思いますが。

。。
確か\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Windows\CurrentVersion\App Paths配下にあったはずです。

VBでレジストリへアクセスする方法は知りませんのでゴメンナサイ。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
そうですね。単純にインストール先を取得するには、やっぱりレジストリを参照するしかなさそうな気がします。

お礼日時:2001/08/02 15:35

(1)ShellExecute関数


そもそもフルパスを取得する必要があるのか?
大抵のアプリはパスなしのEXE名("Excel.exe"等)をShellExecute関数に指定すれば動きます

(2)FindExecutable関数
xlsファイルをFindExecutable関数に渡せばExecelのフルパス名が分かります
http://www.vbvbvb.com/jp/gtips/0951/gFindExecuta …

(3)SearchPath関数
"Excel.exe"を検索する
http://www.vbvbvb.com/jp/gtips/0101/gSearchPath. …
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。参考になりました。

しかし。
(1)ShellExecute関数
 残念ながら呼び出したいプログラムは、EXE名のみでは実行できず。
(2)FindExecutable関数
 関連づけられている拡張子もないため、この手も使えず。
 
なので、考えられるとしたら、(3)SearchPath関数ですが、この方法だとローカルディスクの全領域を調べるとしたら、結構な時間がかかってしまうため、あんまり使いたくありません。
 単純にインストール先を取得するには、xruzさんが言うようにレジストリを参照するしかないような気がします。

お礼日時:2001/08/02 15:58

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAdobeReaderがインストール済かの確認方法について

プログラム(インストーラ)でAdobe(Acrobat)Readerがインストールされていなかったら、AdobeReaderのインストールモジュールをパソコンにコピーしてAdobe(Acrobat)Readerのインストーラを起動したいと考えています。
インストール済か未インストールか、またアンインストール済かを判断する何か良い方法はありますか?

Aベストアンサー

#2,です。

>WindwsAPI等で確認する事は可能ですか?

当方も、詳しい方ではありませんので、下記のサイトを参考に、

Windows Server World Online - “Windows Installer Clean Up”を利用したトラブルシューティング
http://www.windows-world.jp/ms_support/-/67869.html
【プログラムの追加と削除】に表示される情報を取得 - MSDN フォーラム
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1428644&SiteID=7

確認するだけなら、「プログラムの追加と削除」や「Program Files」の確認で十分だと思いますが、いったい何をしたいのでしょうか?
Windows API については、別途、[技術者向]コンピュータのカテゴリで「インストールされているプログラムを Windows API で確認したい」等の質問をされた方が、的確な回答が寄せられるのではないでしょうか?

参考URL:http://okwave.jp/c205.html

#2,です。

>WindwsAPI等で確認する事は可能ですか?

当方も、詳しい方ではありませんので、下記のサイトを参考に、

Windows Server World Online - “Windows Installer Clean Up”を利用したトラブルシューティング
http://www.windows-world.jp/ms_support/-/67869.html
【プログラムの追加と削除】に表示される情報を取得 - MSDN フォーラム
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1428644&SiteID=7

確認するだけなら、「プログラムの追加と削除」や「Program Files」の確認...続きを読む

Qアプリケーション開始パス

VB.NETを勉強中なのですが、
アプリケーション開始パスを調べるときに例えば、
System.Diagnostics.Process.Start(Application.StartupPath & "\abc.txt")
と記述すると実行ファイルと同階層にあるabc.txtが開きます。
また、
System.Diagnostics.Process.Start("abc.txt")
と記述しても同様に動作しました。
今まで1番目のようにApplication.StartupPathを入れて記述してきたのですが、2番目のような記述でも実行ファイルと同階層のファイルを表し、結局はどちらも同じということなのでしょうか?

Aベストアンサー

No
その場合はカレントディレクトリのabc.txtになる
エクスプローラ上でダブルクリックしたらカレント==EXEファイルのパスだけれども、
System.IO.Directory.SetCurrentDirectory() で別のディレクトリに移動した場合や
コマンドプロンプトからの起動、ショートカットの作業フォルダに別のパスを入れた場合、ファイル名を指定して実行
などは別の所のabc.txtを指してしまう

QAdobeフラッシュプレーヤーがインストール出来ません

よろしくお願いします。
 
 何度もAdobeフラッシュプレーヤーをインストールしても、youtubeの動画ダイアログが表示出来ません。「新しいフラッシュプレーヤーをインストールしてください」というようなメッセージが出ますが、そのAdobeのサイトでインストールしても、直りません。
 そこで、AdobeReaderを一度アンインストールして、再インストールしました。その後、Adobeフラッシュプレーヤーをインストールしました。でも、直りません。
 そこで、Adobeのトラブルシューティングを読んで、インターネットのツールのセキュリティタブで、ほとんど有効に設定しても直りません。

 他に何が原因か分からないので、どうぞよろしくお願いします。

Aベストアンサー

youtube以外のflv動画は見ることが出来ますか?
例:ニコニコ動画

見ることが出来るのならばyoutube側の問題で、質問者さん側に非はありません(youtube側の対応を待つしかない)。

Q[VB2008]引数付きパスでアプリケーションを起動

"*:\***" -* *** -* "***"
のような形式の引数付きパスでアプリケーションを起動するにはどうすればいいでしょうか。

ご回答よろしくお願いします。

Aベストアンサー

コマンドインタープリタ(XPならCMD.EXE)に引数を渡す方法で可能だと思います。

Dim psi As New System.Diagnostics.ProcessStartInfo()
'ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
psi.Arguments = "/c " & """*:\***"" -* *** -* ""***"""
returnValue = System.Diagnostics.Process.Start(psi)

私も同じように悩んで、この方法で解決しました。

QAdobeReader8をインストール後にもAdobeReader6が残っています。

adobeのサポートでは、バージョン6だとアンインストールしなくてもAdobeReader8.0をインストールすると置き換えられるとなっていました。
http://www.adobe.com/jp/support/kb/ts/230/ts_230407_ja-jp.html#anc_b
AdobeReader6を先にアンインストールしようかと迷っていたところ上記の記事で安心してインストールしたのですが、確認してみると「すべてのプログラム」と「プログラムの追加と削除」に「AdobeReader6.0」がありました。
アンインストールの操作をしたほうがいいのかこのままでいいのかと迷っています。
ちなみに「プログラムの追加と削除」でのサイズは、8が104.00MBで6が31.37MBです。

Aベストアンサー

>アンインストールの操作をしたほうがいいのかこのままでいいのかと迷っています。


というか、両方アンインストールして
Adobe Reader ver. 9.1.3をインストールされることをお勧めします。

まだ8のアップデートはされていますが、いずれ終わります。
早めに9への移行をお勧めします。

QExpress版でOfficeアプリケーション開発は可能?

「Visual Basic 2005 Express Edition」で「Excel VBA」のようにOfficeアプリケーション開発は可能でしょうか。
可能であるならば、開発方法が学習できるサイトや書籍を紹介して下さい。

Aベストアンサー

「図解でわかる Visual Basic 入門」(荒瀬 遙  著)を最初に読んでみると表計算ソフトの考え方がわかります。内容は、「第5章 表計算シート作成プログラム」が62ページにわたって解説してあります。

QAdobe Flash Playerのインストール

Adobe Flash Playerのインストールが上手く出来ません。インストールサイトでは「インストール出来ました」と表示されるのですが、再起動しても、インストールされてないのか「Adobe Flash Playerをインストールしてくだい」と再び表示されてしまいます。

Aベストアンサー

次からUninstaller.exeをダウンロードして実行し、削除のうえ、パソコンを再起動して、Flashのインストールページで、再度、最新バージョンのインストールを試してみてください。
http://www.adobe.com/jp/shockwave/download/alternates/

IEでしたら、ツール→アドオンの管理で、Flash Objectが有効になっていることも確認してください。

QMDIアプリケーションの子ウィンドウとしてOfficeを起動する方法

MDIアプリケーションを作成しているのですが、行き詰ってしまったので質問させていただきます。

開発環境はVB.net2008Expressを使用しています。

タイトルの通りなのですが、MDIの子ウィンドウとして既存のプログラムやソフトウェア(今回はOfficeのWordを起動しようとしています)を起動する方法を調べています。

Dim ass As System.Reflection.Assembly
ass = System.Reflection.Assembly.LoadFrom("起動したいプログラムのFullName")
Dim childFrm As Form = ass.CreateInstance("起動したい実行ファイルのメインフォームのクラス名")
childFrm.MdiParent = Me
childFrm.Show()
という方法を見つけて試してみたのですが、"起動したい実行ファイルのメインフォームのクラス名"がわからずオブジェクト参照されませんでした。

知識不足でどういった検索ワードで検索したらいいかもわからない状態です。どうか皆さんのお知恵を拝借させていただけないでしょうか?

MDIアプリケーションを作成しているのですが、行き詰ってしまったので質問させていただきます。

開発環境はVB.net2008Expressを使用しています。

タイトルの通りなのですが、MDIの子ウィンドウとして既存のプログラムやソフトウェア(今回はOfficeのWordを起動しようとしています)を起動する方法を調べています。

Dim ass As System.Reflection.Assembly
ass = System.Reflection.Assembly.LoadFrom("起動したいプログラムのFullName")
Dim childFrm As Form = ass...続きを読む

Aベストアンサー

Office2007は確認していませんが、少なくともWord 2003ではアセンブリを取得することができませんでした。アセンブリが取得出来ない限り、リフレクションでクラス生成…というアプローチは難しい(というか不可能?)かと思います。

VB6.0時代はOLEで他のアプリケーションを取り込む方法がありました。.NETでOLEコンテナはなくなってしまったようですが、OLEの仕様から果敢に挑戦されているサイトを見つけたので、参考にしてみてください。
http://www5.plala.or.jp/atata/net/

QAdobe Flash Playerのインストール

最新版のAdobe Flash Playerを間違ってアンインストールしてしまい、再度最新Adobe Flash Playerをインストールをすると、
新しいバージョンがすでにインストール済みですと出て、ペーじが変わりAdobe Flash Playerのインストールに失敗しましたと出ます、インストールが出来ません、
プロクラムのアンインストールを見るとアンインストールが出来ています、
Program filesのAdodeの所を見てもFlash Playerは削除されています。
インストール出来る様にお教え願います。

OS・WindowsVista
IE・9

Aベストアンサー

>インストール出来る様にお教え願います。
下記サイトからアンインストーラーをダウンロードして実行してみると良いでしょう。

http://helpx.adobe.com/jp/flash-player/kb/230810.html

Qファイルを探すプログラムで c:\のみ動かない

ファイルを探すプログラムをネット頂き テストしたのですが
c:\ のみ 動かず c:\*** は そのフォルダーから下を探します
e:\ は 全てのフォルダーを探します。
WIN8 ですが どこで間違ってるのでしょうか?
よろしくどうぞ

Option Explicit
Private g_dteDate As Date
Private g_strEXT As String

'参照設定 M-Scripting.Runtime

Cells(1, 2).Value に 探すアドレス 記載 c:\  e:\  c:\*** など

Sub Sample_FileSearch2()

  Dim vntF As Variant
Dim objFSO As FileSystemObject
Dim dteDate As Date
Dim GYO As Long
Dim cntFound As Long

Set objFSO = New FileSystemObject ' FSO
Rows("5:65536").ClearContents
GYO = 4
’ g_dteDate = DateAdd("m", Cells(3, 2).Value * -1, Date) 更新 不要
g_strEXT = UCase(Trim(Cells(2, 2).Value))

' ルートフォルダから探索開始
Call Sample_FileSearch2_SUB(objFSO, _
objFSO.GetFolder(Trim(Cells(1, 2).Value)), GYO, cntFound)
Set objFSO = Nothing
' 処理結果の表示
If cntFound = 0 Then
MsgBox "見つかりません"
Else
MsgBox cntFound & "個見つかりました"
End If
End Sub

'''*******************************************************************************
''' ファイル探索処理(再帰動作)
'''*******************************************************************************
Private Sub Sample_FileSearch2_SUB(objFSO As FileSystemObject, _
ByVal objFolder As Folder, _
GYO As Long, cntFound As Long)
Dim objFolder2 As Folder
Dim objFile As File

' サブフォルダの探索
For Each objFolder2 In objFolder.SubFolders
' サブフォルダ個々の探索(再帰動作)
Call Sample_FileSearch2_SUB(objFSO, objFolder2, GYO, cntFound)

Next objFolder2

' このフォルダ内のファイルの探索
For Each objFile In objFolder.Files
' ここから条件判断
With objFile
If (UCase(objFSO.GetBaseName(.Path)) = g_strEXT) Then

GYO = GYO + 1
Cells(GYO, 1).Value = .Name
Cells(GYO, 2).Value = .DateLastModified
Cells(GYO, 3).Value = _
Left(.Path, Len(.Path) - Len(.Name) - 1)
cntFound = cntFound + 1
End If
End With
Next objFile

End Sub

ファイルを探すプログラムをネット頂き テストしたのですが
c:\ のみ 動かず c:\*** は そのフォルダーから下を探します
e:\ は 全てのフォルダーを探します。
WIN8 ですが どこで間違ってるのでしょうか?
よろしくどうぞ

Option Explicit
Private g_dteDate As Date
Private g_strEXT As String

'参照設定 M-Scripting.Runtime

Cells(1, 2).Value に 探すアドレス 記載 c:\  e:\  c:\*** など

Sub Sample_FileSearch2()

  Dim vntF As Variant
Dim objFSO As FileSystemObject
...続きを読む

Aベストアンサー

該当フォルダの参照権を持つアカウントの
ユーザとパスワードが分かっていれば可能です。
特定の利用者にしか権限を与えないフォルダに
システム情報を記録して、一般ユーザから保護
するという仕組みはよく見られる手法です。

LogonUserで権限ユーザのトーケンを取得し、
ImpersonateLoggedOnUseで偽装します。偽装中は
フォルダを参照できます。
その後、RevertToSelfで偽装を終わり、処理後、
CloseHandleでトーケンを閉じます。
以下、サンプルです。

Const LOGON32_LOGON_INTERACTIVE As Long = 2
Const LOGON32_PROVIDER_DEFAULT As Long = 0
Declare Function LogonUser Lib "Advapi32" Alias "LogonUserA" _
    (ByVal ユーザ As String, _
     ByVal ドメイン As String, _
     ByVal パスワード As String, _
     ByVal タイプ As Long, _
     ByVal プロバイダ As Long, _
     ByRef トーケン As Long) As Long
Declare Function ImpersonateLoggedOnUser Lib "Advapi32" _
    (ByVal トーケン As Long) As Long
Declare Function RevertToSelf Lib "Advapi32" () As Long
Declare Function CloseHandle Lib "kernel32" _
    (ByVal ハンドル As Long) As Long

Sub サンプル()
Dim トーケン As Long
Dim 処理結果 As Long

'★トーケン取得
処理結果 = LogonUser("uuuu", ".", "pppp" _
         , LOGON32_LOGON_INTERACTIVE _
         , LOGON32_PROVIDER_DEFAULT _
         , トーケン)
If 処理結果 = 0 Then
    MsgBox "ログオンできない"
    Exit Sub
End If
'★偽装開始
ImpersonateLoggedOnUser トーケン
'==
'= ここで該当フォルダの処理を行う
'==
'★偽装終了
RevertToSelf
'★トーケン解放
CloseHandle トーケン
End Sub

※上記はローカルアカウントのuuuu/ppppの例です。

但し、フォルダ毎に権限者が誰か調べたりする
必要があります。尚、権限が設定されていないと、
Administratorでも何も出来ません。
これも調べる方法、破る方法はあるんですが、さすがに
セキュリティに関することなので、一般公開できません。

ここまでするよりはエラーハンドリングで逃げたほうが
マシかも知れませんね。

該当フォルダの参照権を持つアカウントの
ユーザとパスワードが分かっていれば可能です。
特定の利用者にしか権限を与えないフォルダに
システム情報を記録して、一般ユーザから保護
するという仕組みはよく見られる手法です。

LogonUserで権限ユーザのトーケンを取得し、
ImpersonateLoggedOnUseで偽装します。偽装中は
フォルダを参照できます。
その後、RevertToSelfで偽装を終わり、処理後、
CloseHandleでトーケンを閉じます。
以下、サンプルです。

Const LOGON32_LOGON_INTERACTIVE As Long = 2
Const LO...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報