トップ回答者
vbsから File.ReadALLTextメッソッド実行時にIOExceptionが発生する

質問
-
お世話になります。
サンデープログラマーです。
今回、vbsから.net機能を使用したくCOM相互運用でDLLを作成しましたがvbsから実行しようとすると次の例外が発生してしまいます
'System.Security.Permission.FileIOPermission,mscorlib.Version=2.0.0.0 Culture=neutral,Publickey Tpken=b77a5c561934e089'のアクセス許可に失敗しました
自分なりに調査しましたが、分かりません。ご助言をお願いします。
1.発生する箇所
(1)COMのプログラム
下記プログラムの28行目のStreamReaderで発生します。
Option Explicit On
Option Strict On
Imports System
Imports System.IO
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)>
Public Class ComClass1
Inherits System.Attribute
#Region "COM GUID"
' これらの GUID は、このクラスおよびその COM インターフェイスの COM ID を
' 指定します。この値を変更すると、
' 既存のクライアントはクラスにアクセスできなくなります。
Public Const ClassId As String = "b3a35d7c-8597-4a9c-9be0-6cbf74cf190c"
Public Const InterfaceId As String = "bc97a948-ec86-44ea-85f4-796df0d70dcc"
Public Const EventsId As String = "26d6264e-f251-423b-b5fb-2eb4ecbe550b"
#End Region' 作成可能な COM クラスにはパラメーターなしの Public Sub New() を指定しなければ
' なりません。これを行わないと、クラスは COM レジストリに登録されず、
' CreateObject 経由で
' 作成できません。
Public Sub New()
MyBase.New()
End Sub
Public Function DataSet(ByVal Path As String, ByRef err As String) As BooleanDataSet = False
Try
Dim file As New System.IO.StreamReader(Path)
file.Close()
DataSet = TrueCatch ex As Exception
err = ex.Message.ToString()
End Try
End Function
End Class(2)VBSのプログラム
dim Err
dim R
set R =CreateObject("ClassLibrary14.ComClass1")
pathname="C:\バルブデータ正規表現.txt"
msgbox R.DataSet(pathname,Err)
msgbox " Error= " & Err
set R = nothing2.実行環境
(1)仮想PC(Windows7)のドキュメントフォルダで実行。
3.これまで分かったこと
(1)仮想PCでもVB.netからDLLを呼び出すと正常に処理できます。仮想PCではvbsからの呼び出しができません。
(2)ハードディスク付PCであればvbsからDLLを正常に処理できます。
(3)COM側にattributeをインポートして今回作成したファンクションDataSetに下記を追加してみましたが結果は同じでした。
<SecurityPermissionAttribute(SecurityAction.Demand, Flags:=SecurityPermissionFlag.AllFlags)>
<FileIOPermissionAttribute(SecurityAction.Demand, Unrestricted:=True)>以上
わかばマーク
自己レスです。visual studioでビルド時に作成されるdllとタイプライブラリを自PCのレジストリに登録したらvbsからも実行できました。visual studioでビルドすれば両方ともレジストリに自動登録されるものと思いこんでいました。しかしわたくしのVisual studio 2015 無償版ではタイプライブラリの登録は行われず、regasmを手動でたたく必要があるようでした。
- 編集済み TasCal 2016年6月21日 3:10