غير مصرح به accessexception عند تشغيل تطبيق سطح المكتب من المجلد المشترك

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

سؤال

لقد قمت بإنشاء تطبيق سطح المكتب باستخدام VS 2008.

عندما أقوم بتشغيله محليًا ، يعمل كل شيء بشكل جيد.

شاركت مجلد الإخراج الخاص بي (دون السماح لمستخدمي الشبكة بتغيير ملفاتي) وقمت بتشغيل exe من كمبيوتر Vista آخر على إنترانت لدينا.

عند تشغيل EXE المشترك ، أتلقى "System.UnauthorizedAccessexception" عند محاولة قراءة ملف.

كيف يمكنني إعطاء الإذن للسماح بقراءة الملف؟ هل يجب علي تغيير الرمز؟ هل يجب علي منح إذن إلى المجلد Application على الكمبيوتر Vista؟ كيف؟

ملحوظات:

  • أنا لا أستخدم ClickOnce. يجب توزيع التطبيق باستخدام XCOPY.

  • إطار العمل المستهدف الخاص بي هو ".NET Framework 2.0"

  • على كمبيوتر Vista ، "ControlPanel | UninstallorChangePrograms" يقول إنه يحتوي على "Microsoft .NET Framework 3.5 SP1"

  • حاولت أيضًا تعيين محرك الأقراص المجلد ، لكنني حصلت على نفس الأخطاء ، والآن فقط اسم الملف هو "t: my.ocx"

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

    ' رمز بلدي:

    Dim SRC AS string = mcGlobals.cmcfiles.mcgetFilenameOcx ()
    Dim ioStream كـ new System.io.filestream (SRC ، io.filemode.open)

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

    وظيفة المشتركة العامة McGetFilenameOcx () كسلسلة

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

      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 ،

  • إذا تم ضبط معلمة الوضع على ألحق, يكتب هو الوصول الافتراضي.
  • خلاف ذلك ، يتم تعيين الوصول إلى قراءة و كتابة.

-> استخدم الكود الخاص بي الافتراضي ، مع ioStream.canwrite: = صحيح ، وليس لدي يكتب إذن على المجلد المشترك.

لذلك أضفت 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 Framework 3.5 SP1 يُسمح لك بتشغيل تطبيق من مشاركة الشبكة. ليس عليك أن تستهدفها ، عليك فقط تثبيتها.

مراجع

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top