Ну, я нашел два решения на свой вопрос.
Является ли это возможным? Как показывают @jacob и все мои исследования, я так не думаю. Если вы собираетесь использовать элемент управления webBrowser для просмотра локального или UNC-пути, вам придется внести изменения в безопасность IE или обработать сообщение для каждого открываемого файла.
Решение №1
Измените настройки безопасности в IE. В моей организации все заблокировано, поэтому изменения в настройках IE можно вносить только с помощью групповой политики.
- Добавьте
file://servername/*
в зону интрасети с помощью групповой политики для нужного доменного подразделения.
- Включите параметр IE для политики «Запуск приложений и файлов в IFRAME» через групповую политику для нужного доменного подразделения.
Решение № 2
Замените элемент управления webBrowser в моем приложении другими элементами управления, которые могут выполнять те же функции. Это тот, с которым я пошел, чтобы иметь больше контроля над всей работой с файлами и каталогами. Мне также не нужно беспокоиться о том, что параметры безопасности и применение групповой политики корректны и работают правильно. Мне также не нужно беспокоиться о том, что изменения в этих областях повлияют на меня.
Вот статья, с которой я начал работу
Прогулка в том виде, в котором она есть, работает очень хорошо. Я прошел через это в одном проекте, прежде чем интегрировать его в свой проект. Мне нужно изменить несколько вещей, чтобы они подходили мне. Вот мой код, как он закончился. Я внес некоторые изменения и добавил несколько событий выбора/нажатия.
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 (или переключать случаи) в раздел, где он добавляет элементы в список. Просто проанализируйте расширения файлов.
Надеюсь, это когда-нибудь поможет кому-нибудь!
person
MatthewD
schedule
20.01.2016
@
, чтобы не экранировать каждую обратную косую черту. напримерnew Uri(@"C:\Temp\")
; что касается вашего вопроса, я не верю, что вы можете подавить сообщение безопасности Windows, не изменив настройки безопасности. - person jacob   schedule 19.01.2016