【发布时间】:2017-11-29 03:35:06
【问题描述】:
对 c# 和 MVC 来说非常陌生。我有一个 MVC 应用程序设置,其中一个 webapp 在类似浏览器控件的 chrome 下运行。我在 webapp (html) 中有按钮,用户可以从中选择他想要的文件夹,然后我想要它们的实际路径。
为此,我正在向我的 MVC 控制器发出 ajax 请求,该控制器将打开 folderBrowserDialog (System.Windows.Forms),然后将路径作为 ajax 响应返回。当我使用 Visual Studio 运行应用程序时,一切正常。但是在制作应用程序包并安装exe之后,文件夹BrowserDialog根本没有出现。没有错误抛出 ajax 响应,正确的值为 null
这里是代码(部分)
selectFolderGlobal 是一个全局变量
public JObject OpenFolderExplorer()
{
try
{
Thread fb= new Thread(new ThreadStart(openFileBrowser), 1);
fb.SetApartmentState(ApartmentState.STA);
fb.Start();
fb.Join();
JObject selectedFolder = new JObject();
selectedFolder.Add("selectedFolder", selectedFolderGlobal);
return selectedFolder;
}
catch (Exception ex)
{
Logger.Log(" Exception: " + ex.Message);
JObject errorcode = JObject.Parse(mConstants.EXCEPTION);
return errorcode;
}
}
private void openFileBrowser()
{
try
{
var fbd= new FolderBrowserDialog();
fbd.ShowNewFolderButton = false;
DialogResult result = fbd.ShowDialog(new Form() { TopMost = true, WindowState = FormWindowState.Minimized });
if (result == DialogResult.OK)
{
selectedFolderGlobal= fbd.SelectedPath;
}
}
catch (Exception ex)
{
Logger.Entry(" Exception: " + ex.Message);
}
}
Ajax 响应是这样返回的
{
"selectedFolder":null
}
任何人都知道为什么它可能仅在创建包之后发生(在生成 .exe 之后)? System.Windows.Forms.dll 被添加到依赖项中(如果不是,它应该引发异常,甚至包构建都会失败)
【问题讨论】:
-
刚刚用本地托管的 IIS 调试它得到一个异常导致这个 SO 链接:stackoverflow.com/questions/8928713/…(“当应用程序未在 UserInteractive 模式下运行时显示模式对话框或表单不是有效操作. 指定 ServiceNotification 或 DefaultDesktopOnly 样式以显示来自服务应用程序的通知。")
-
用上面的消息搜索给出了一个想法,它可能是不可能的,但是在所有东西(客户端、服务器)都在同一台机器上的情况下,真的无法弄清楚是否有解决方法或不 。 “ServiceNotification 或 DefaultDesktopOnly 样式显示来自服务应用程序的通知” - 可能有办法做到这一点