将程序传输到新域和新服务器时出现此错误,并且仅针对少数用户:
"Request for the permission of type System.Security.Permissions.FileIOPermission, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 failed."
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet grantedSet, PermissionSet deniedSet, CodeAccessPermission demand, PermissionToken permToken)
at System.Security.CodeAccessSecurityEngine.Check(PermissionToken permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32 checkFrames, Int32 unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Windows.Forms.FileDialog.set_Title(String value)
at mainForm.InitializeComponent() in C:\MyProjects\DTSExecuter.root\DTSExecuter\DWMaintenance\mainForm.vb:line 88
at mainForm..ctor() in C:\MyProjects\DTSExecuter.root\DTSExecuter\DWMaintenance\mainForm.vb:line 16
at mainForm.Main() in C:\MyProjects\DTSExecuter.root\DTSExecuter\DWMaintenance\mainForm.vb:line 4
我的机器运行应用程序就像其他用户一样运行良好,但只有少数用户可以使用 “应用程序已生成无法处理的异常”。错误框,并在调试时返回上述错误。这是我们可能无法访问源代码的遗留应用程序,它只是更改了内部连接管理器中的连接字符串。除了在新域上运行之外,这是对应用程序的唯一更改。
答案 0 :(得分:2)
我在自己面前遇到过这种情况。如果Open / SaveFileDialog的起始位置是网络路径,并且运行该应用程序的帐户没有读取网络路径的权限,则会抛出此异常。
只需将InitalDirectory的值设置为安全(例如Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
),就可以解决问题。
重新阅读问题后,我发现你无法改变消息来源。我只能建议两件事。遇到问题的用户让他们使用快捷方式启动程序并将工作目录设置为本地路径。如果原始程序员没有设置InitalDirectory
,它将默认为工作目录。
要检查的另一件事是你说你搬到了一个新域,确保用户有权访问该程序试图与之交谈的任何文件夹。也许是没有正确迁移的权限。
看到the comment in XPD's answer后,我认为这就是现在发生的事情:
\\Foo\Bar\
并手动输入用户名和密码。\\Foo\Bar\Baz.exe
\\Foo\Bar\
InitalDirectory
。它使用步骤#4中设置的工作目录。\\Foo\Bar\
。
有四种方法可以解决此问题,按首选选项的降序排列。
InitialDirectory
\\Foo\Bar
的权限,以便用户无需手动输入凭据即可连接到该帐户。答案 1 :(得分:1)
问题似乎在于设置Open / SaveFileDialog实例的标题栏。看起来这个应用程序无法访问该路径。它可以是用于设置此文件对话框标题的资源文件。为用户提供必要的目录和文件权限。
答案 2 :(得分:0)
找出它在mainForm.vb中尝试访问的文件I / O路径,并为相关用户提供此路径中必要的目录权限。