Windows 打开文件时的安全消息
Windows Security Message when opening file
我有一个带有 webBrowser 控件的 Windows 表单桌面应用程序。我导航到服务器 webBrowser1.Navigate(new Uri("\\srvername\share\directory\"))
上的一个目录,以允许用户从该目录打开文件。
当他们双击文件时,每次都会收到 Windows 安全消息。
单击“确定”后,文件将按需要打开。
如果我设置导航到本地目录 webBrowser1.Navigate(new Uri("C:\Temp\"));
我没有收到消息。
是否有程序化的方法来防止它显示,或者这是必须作为受信任站点添加到浏览器的东西吗?我们网络上的标准用户无权添加受信任的站点。我试图检查 IE 的本地 Intranet 部分中的 "Include all network paths UNC"。
我试过了
webBrowser1.ScriptErrorsSuppressed = true;
但这不起作用,因为它似乎意味着控件中显示的网页发生脚本错误。
好吧,我找到了两个解决问题的方法。
可能吗?正如@jacob 和我所有的研究表明的那样,我认为不是。如果您打算使用 webBrowser 控件查看本地或 UNC 路径,则必须更改 IE 安全性或处理打开的每个文件的消息。
结果 #1
更改 IE 中的安全设置。我的组织已锁定所有内容,因此只能通过组策略更改 IE 设置。
- 通过所需域 OU 的组策略将
file://servername/*
添加到 Intranet 区域。
- 通过所需域 OU 的组策略启用 IE 设置“在 IFRAME 中启动应用程序和文件”策略。
结果 #2
将我的应用程序中的 webBrowser 控件替换为可以实现相同功能的其他控件。这是我使用的一个,因此我可以更好地控制文件和目录的所有工作。我也不必担心安全设置和组策略实施是否正确和正常工作。我也不必担心这些方面的变化会影响到我。
Here is the article I used to get started
目前的演练效果很好。在将它集成到我的项目中之前,我在一个一次性项目中完成了它。我需要改变一些东西来适应我。这是我的代码,因为它结束了。我做了一些更改并添加了一些 selecting/clicking 事件。
Boolean FocusTreeview = false;
public frmMain()
{
InitializeComponent();
treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
}
// Start by calling this.
private void PopulateTreeView()
{
TreeNode rootNode;
treeView1.Nodes.Clear();
listView1.Items.Clear();
DirectoryInfo info = new DirectoryInfo("Pass the root folder here.");
// Add the root directory.
if (info.Exists)
{
rootNode = new TreeNode(info.Name);
rootNode.Tag = info;
GetDirectories(info.GetDirectories(), rootNode);
treeView1.Nodes.Add(rootNode);
treeView1.Nodes[0].Expand();
// This selects the root directory
NodeSelect(rootNode);
}
}
/********************************************/
private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo)
{
// This will list all the directories and subdirectories
TreeNode aNode;
DirectoryInfo[] subSubDirs;
foreach (DirectoryInfo subDir in subDirs)
{
aNode = new TreeNode(subDir.Name, 0, 0);
aNode.Name = subDir.ToString();
aNode.Tag = subDir;
aNode.ImageKey = "Directory";
subSubDirs = subDir.GetDirectories();
if (subSubDirs.Length != 0)
{
GetDirectories(subSubDirs, aNode);
}
nodeToAddTo.Nodes.Add(aNode);
}
}
/********************************************/
private void NodeSelect(TreeNode newSelected)
{
//Load all the files and directorys in the selected node from the treeview
listView1.Items.Clear();
DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;
ListViewItem.ListViewSubItem[] subItems;
ListViewItem item = null;
foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories())
{
item = new ListViewItem(dir.Name, 0);
subItems = new ListViewItem.ListViewSubItem[]
{new ListViewItem.ListViewSubItem(item, "Directory"),
new ListViewItem.ListViewSubItem(item,
dir.LastAccessTime.ToShortDateString())};
item.SubItems.AddRange(subItems);
listView1.Items.Add(item);
}
foreach (FileInfo file in nodeDirInfo.GetFiles())
{
item = new ListViewItem(file.Name, 1);
subItems = new ListViewItem.ListViewSubItem[] { new ListViewItem.ListViewSubItem(item, "File"), new ListViewItem.ListViewSubItem(item, file.LastAccessTime.ToShortDateString()) };
item.SubItems.AddRange(subItems);
listView1.Items.Add(item);
}
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
}
/********************************************/
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode newSelected = e.Node;
NodeSelect(newSelected);
}
/********************************************/
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
// When something is selected load it's contents to the listview if it is a directory
if (listView1.SelectedItems.Count > 0)
{
var item = listView1.SelectedItems[0];
// Don't do anything if it's just a file
if (item.SubItems[1].Text == "File")
{
return;
}
TreeNode[] tns = treeView1.Nodes.Find(item.Text, true);
if (tns.Length > 0)
{
treeView1.Focus();
NodeSelect(tns[0]);
treeView1.SelectedNode = tns[0];
tns[0].Expand();
FocusTreeview = true;
}
}
}
/********************************************/
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
// This needs to be done so the directory appears to stay selected in the treeview
if (FocusTreeview == true)
{
treeView1.Focus();
FocusTreeview = false;
}
}
/********************************************/
private void listView1_DoubleClick(object sender, EventArgs e)
{
// This will open the files that are double clicked on
if (listView1.SelectedItems.Count > 0)
{
var item = listView1.SelectedItems[0];
// Don't do anything for directories
if (item.SubItems[1].Text == "Folder")
{
return;
}
// Open the selected file
Process.Start(globals.szJobFolderPath + item.Text);
}
}
最后变成了这个样子。
您确实丢失了 Word 文档等已知文件的图标,但这对我来说不是什么大问题。您可以将已知文件类型的图标添加到图像列表中,并在将项目添加到列表视图的部分中放置一些 if 语句(或切换大小写)。只分析文件扩展名。
希望有一天这对某人有所帮助!
我有一个带有 webBrowser 控件的 Windows 表单桌面应用程序。我导航到服务器 webBrowser1.Navigate(new Uri("\\srvername\share\directory\"))
上的一个目录,以允许用户从该目录打开文件。
当他们双击文件时,每次都会收到 Windows 安全消息。
单击“确定”后,文件将按需要打开。
如果我设置导航到本地目录 webBrowser1.Navigate(new Uri("C:\Temp\"));
我没有收到消息。
是否有程序化的方法来防止它显示,或者这是必须作为受信任站点添加到浏览器的东西吗?我们网络上的标准用户无权添加受信任的站点。我试图检查 IE 的本地 Intranet 部分中的 "Include all network paths UNC"。
我试过了
webBrowser1.ScriptErrorsSuppressed = true;
但这不起作用,因为它似乎意味着控件中显示的网页发生脚本错误。
好吧,我找到了两个解决问题的方法。
可能吗?正如@jacob 和我所有的研究表明的那样,我认为不是。如果您打算使用 webBrowser 控件查看本地或 UNC 路径,则必须更改 IE 安全性或处理打开的每个文件的消息。
结果 #1
更改 IE 中的安全设置。我的组织已锁定所有内容,因此只能通过组策略更改 IE 设置。
- 通过所需域 OU 的组策略将
file://servername/*
添加到 Intranet 区域。 - 通过所需域 OU 的组策略启用 IE 设置“在 IFRAME 中启动应用程序和文件”策略。
结果 #2
将我的应用程序中的 webBrowser 控件替换为可以实现相同功能的其他控件。这是我使用的一个,因此我可以更好地控制文件和目录的所有工作。我也不必担心安全设置和组策略实施是否正确和正常工作。我也不必担心这些方面的变化会影响到我。
Here is the article I used to get started
目前的演练效果很好。在将它集成到我的项目中之前,我在一个一次性项目中完成了它。我需要改变一些东西来适应我。这是我的代码,因为它结束了。我做了一些更改并添加了一些 selecting/clicking 事件。
Boolean FocusTreeview = false;
public frmMain()
{
InitializeComponent();
treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
}
// Start by calling this.
private void PopulateTreeView()
{
TreeNode rootNode;
treeView1.Nodes.Clear();
listView1.Items.Clear();
DirectoryInfo info = new DirectoryInfo("Pass the root folder here.");
// Add the root directory.
if (info.Exists)
{
rootNode = new TreeNode(info.Name);
rootNode.Tag = info;
GetDirectories(info.GetDirectories(), rootNode);
treeView1.Nodes.Add(rootNode);
treeView1.Nodes[0].Expand();
// This selects the root directory
NodeSelect(rootNode);
}
}
/********************************************/
private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo)
{
// This will list all the directories and subdirectories
TreeNode aNode;
DirectoryInfo[] subSubDirs;
foreach (DirectoryInfo subDir in subDirs)
{
aNode = new TreeNode(subDir.Name, 0, 0);
aNode.Name = subDir.ToString();
aNode.Tag = subDir;
aNode.ImageKey = "Directory";
subSubDirs = subDir.GetDirectories();
if (subSubDirs.Length != 0)
{
GetDirectories(subSubDirs, aNode);
}
nodeToAddTo.Nodes.Add(aNode);
}
}
/********************************************/
private void NodeSelect(TreeNode newSelected)
{
//Load all the files and directorys in the selected node from the treeview
listView1.Items.Clear();
DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;
ListViewItem.ListViewSubItem[] subItems;
ListViewItem item = null;
foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories())
{
item = new ListViewItem(dir.Name, 0);
subItems = new ListViewItem.ListViewSubItem[]
{new ListViewItem.ListViewSubItem(item, "Directory"),
new ListViewItem.ListViewSubItem(item,
dir.LastAccessTime.ToShortDateString())};
item.SubItems.AddRange(subItems);
listView1.Items.Add(item);
}
foreach (FileInfo file in nodeDirInfo.GetFiles())
{
item = new ListViewItem(file.Name, 1);
subItems = new ListViewItem.ListViewSubItem[] { new ListViewItem.ListViewSubItem(item, "File"), new ListViewItem.ListViewSubItem(item, file.LastAccessTime.ToShortDateString()) };
item.SubItems.AddRange(subItems);
listView1.Items.Add(item);
}
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
}
/********************************************/
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode newSelected = e.Node;
NodeSelect(newSelected);
}
/********************************************/
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
// When something is selected load it's contents to the listview if it is a directory
if (listView1.SelectedItems.Count > 0)
{
var item = listView1.SelectedItems[0];
// Don't do anything if it's just a file
if (item.SubItems[1].Text == "File")
{
return;
}
TreeNode[] tns = treeView1.Nodes.Find(item.Text, true);
if (tns.Length > 0)
{
treeView1.Focus();
NodeSelect(tns[0]);
treeView1.SelectedNode = tns[0];
tns[0].Expand();
FocusTreeview = true;
}
}
}
/********************************************/
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
// This needs to be done so the directory appears to stay selected in the treeview
if (FocusTreeview == true)
{
treeView1.Focus();
FocusTreeview = false;
}
}
/********************************************/
private void listView1_DoubleClick(object sender, EventArgs e)
{
// This will open the files that are double clicked on
if (listView1.SelectedItems.Count > 0)
{
var item = listView1.SelectedItems[0];
// Don't do anything for directories
if (item.SubItems[1].Text == "Folder")
{
return;
}
// Open the selected file
Process.Start(globals.szJobFolderPath + item.Text);
}
}
最后变成了这个样子。
您确实丢失了 Word 文档等已知文件的图标,但这对我来说不是什么大问题。您可以将已知文件类型的图标添加到图像列表中,并在将项目添加到列表视图的部分中放置一些 if 语句(或切换大小写)。只分析文件扩展名。
希望有一天这对某人有所帮助!