共有フォルダーからデスクトップアプリケーションを実行するときに、UnauthorizedAccesSexception

StackOverflow https://stackoverflow.com/questions/2691159

質問

VS 2008を使用してデスクトップアプリケーションを作成しました。

ローカルで実行すると、すべてがうまく機能します。

出力フォルダーを共有し(ネットワークユーザーがファイルを変更できるようにすることなく)、イントラネットの別のVistaコンピューターからEXEを実行しました。

共有exeを実行するとき、ファイルを読み取ろうとするときに「System.uthorizedAccesSexception」を受け取ります。

ファイルを読む許可を与えるにはどうすればよいですか?コードを変更する必要がありますか? Vistaコンピューターのアプリケーションフォルダーに許可を付与する必要がありますか?どうやって?

ノート:

  • ClickOnceは使用しません。アプリケーションはXcopyを使用して配布する必要があります。

  • 私のアプリケーションターゲットフレームワークは「.NETフレームワーク2.0」です

  • Vistaコンピューターでは、「ControlPanel | UninstallorChangePrograms」と書かれています。

  • また、フォルダドライブをマップしようとしましたが、同じエラーがありましたが、ファイル名は「T: my.ocx」です。

    ' ----------------------------------------------------------------------

    '私のコード:

    dim src as string = mcglobals.cmcfiles.mcgetfilenameocx()
    新しいsystem.io.filestreamとしてのiostream(src、io.filemode.open)

    ' ----------------------------------------------------------------------

    パブリック共有関数mcgetfilenameocx()as string

    ' ----------------------------------------------------------------------

      Dim dirName As String = Application.StartupPath & "\"
      Dim sFiles() As String = System.IO.Directory.GetFiles(dirName, "*.ocx")
    
      Dim i As Integer
      For i = 0 To UBound(sFiles)
        Debug.WriteLine(System.IO.Path.GetFullPath(sFiles(i)))
        ' if found any - return the first:
        Return System.IO.Path.GetFullPath(sFiles(i))
      Next
      Return "" 
    
    End Function
    

    ' ----------------------------------------------------------------------

    '私が受け取る例外:

    System.UnauthorizedAccessException: Access to the path '\\computerName\sharedFolderName\my.ocx' is denied.
      at System.IO._Error(Int32 errorCode, String maybeFullPath)
      at System.IO.FileStream.Init(...)
      at System.IO.FileStream..ctor(...)
      at System.IO.FileStream..ctor(String path, FileMode mode)
    

    ' ----------------------------------------------------------------------

役に立ちましたか?

解決

それを見つけた。

MSDNによると、[FileStream Constructor(String、FileMode)

. 。 。 。 FileAccessパラメーターのないコンストラクターの場合、

  • モードパラメーターがに設定されている場合 追加, 書く デフォルトのアクセスです。
  • それ以外の場合、アクセスが設定されます 読み書き.

- >私のコードはdefaultを使用しました、iostream.canwrite:= true、そして私は持っていません 書く 共有フォルダーの許可。

だから私は追加しました fileaccess パラメーター:

new code:
Dim ioStream As New System.IO.FileStream(srcOcx, IO.FileMode.Open, IO.FileAccess.Read) 

old code:
Dim ioStream As New System.IO.FileStream(srcOcx, IO.FileMode.Open) 

他のヒント

で始まります .NETフレームワーク3.5 SP1 ネットワーク共有からアプリケーションを実行することができます。あなたはそれをターゲットにする必要はありません、あなたはそれをインストールする必要があります。

参照

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top