0

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

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

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

共有exeを実行しているときに、ファイルを読み取ろうとすると「System.UnauthorizedAccessException」が発生します。

ファイルの読み取りを許可するにはどうすればよいですか?コードを変更する必要がありますか?Vistaコンピューターのapplication\folderにアクセス許可を付与する必要がありますか?どうやって?

ノート:

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

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

  • Vistaコンピュータでは、「controlPanel | UninstallOrChangePrograms」には、「Microsoft .NetFramework3.5SP1」が含まれていると表示されます。

  • フォルダドライブもマップしようとしましたが、同じエラーが発生しました。fileNameが "T:\my.ocx"になりました。

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

    '私のコード:

    Dim src As String = mcGlobals.cmcFiles.mcGetFileNameOcx()
    Dim ioStream As New System.IO.FileStream(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)
    

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

4

2 に答える 2

0

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

参考文献

于 2010-04-25T11:54:02.990 に答える
0

それを見つけた。

MSDNによると、[FileStreamコンストラクター(文字列、FileMode)]

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

  • modeパラメータがAppendに設定されている場合、書き込み がデフォルトのアクセスです。
  • それ以外の場合、アクセスはReadWriteに設定されます。

->私のコードは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) 
于 2010-04-25T11:27:13.263 に答える