UnityStandaloneFileBrowser icon indicating copy to clipboard operation
UnityStandaloneFileBrowser copied to clipboard

[Bug] Didn't open dialog in unity 2023.2

Open Thaina opened this issue 7 months ago โ€ข 30 comments

It seem VistaOpenFileDialog are not working in unity 2023, are there any fix?

Thaina avatar Dec 20 '23 05:12 Thaina

I'm having the same issue. Any solutions?

qq294716498 avatar Dec 22 '23 10:12 qq294716498

Have the same error here, urgent issue, needs to be fixed ASAP

realrandombeans avatar Jan 07 '24 20:01 realrandombeans

When I downloaded Ookii.Dialog.dll from below and replaced it, the following error message was output. https://www.ookii.org/software/dialogs/

InvalidProgramException: Invalid IL code in (wrapper managed-to-native) Ookii.Dialogs.Interop.IFileDialog:Advise (intptr,Ookii.Dialogs.Interop.IFileDialogEvents,uint&): IL_0025: ldloc     65535


(wrapper cominterop) Ookii.Dialogs.Interop.IFileDialog.Advise(Ookii.Dialogs.Interop.IFileDialogEvents,uint&)
(wrapper cominterop-invoke) Ookii.Dialogs.Interop.IFileDialog.Advise(Ookii.Dialogs.Interop.IFileDialogEvents,uint&)
Ookii.Dialogs.VistaFileDialog.SetDialogProperties (Ookii.Dialogs.Interop.IFileDialog dialog) (at <31af777adad04cb788cee0ae18e55ae1>:0)
Ookii.Dialogs.VistaOpenFileDialog.SetDialogProperties (Ookii.Dialogs.Interop.IFileDialog dialog) (at <31af777adad04cb788cee0ae18e55ae1>:0)
Ookii.Dialogs.VistaFileDialog.RunFileDialog (System.IntPtr hwndOwner) (at <31af777adad04cb788cee0ae18e55ae1>:0)
Ookii.Dialogs.VistaFileDialog.RunDialog (System.IntPtr hwndOwner) (at <31af777adad04cb788cee0ae18e55ae1>:0)
System.Windows.Forms.CommonDialog.ShowDialog (System.Windows.Forms.IWin32Window owner) (at <6d56e0f579f14156bf364f450d98bf76>:0)
(wrapper remoting-invoke-with-check) System.Windows.Forms.CommonDialog.ShowDialog(System.Windows.Forms.IWin32Window)
SFB.StandaloneFileBrowserWindows.OpenFilePanel (System.String title, System.String directory, SFB.ExtensionFilter[] extensions, System.Boolean multiselect) (at Assets/StandaloneFileBrowser/StandaloneFileBrowserWindows.cs:38)
SFB.StandaloneFileBrowser.OpenFilePanel (System.String title, System.String directory, SFB.ExtensionFilter[] extensions, System.Boolean multiselect) (at Assets/StandaloneFileBrowser/StandaloneFileBrowser.cs:51)
SFB.StandaloneFileBrowser.OpenFilePanel (System.String title, System.String directory, System.String extension, System.Boolean multiselect) (at Assets/StandaloneFileBrowser/StandaloneFileBrowser.cs:39)

Currently, Ookii.Dialogs has been deprecated and has been migrated to Ookii.Dialogs-Wpf, so it does not work as is.

shiena avatar Jan 19 '24 11:01 shiena

Since the dialog can be opened in unity2023.1, it may be a bug in unity2023.2.

shiena avatar Jan 21 '24 14:01 shiena

I have suspect that it's about unity upgrade dotnet standard from 2.0 to 2.1, which ooki dialog may not been built for?

Thaina avatar Jan 21 '24 14:01 Thaina

@Thaina I deleted the Ookii.Dialogs.dll and replaced it with the source, but the same error occurs, so I don't think it is caused by the dotnet standard update.

shiena avatar Jan 21 '24 17:01 shiena

I have submitted a bug report to Unity regarding this error. Currently under review, there was no problem up to Unity2023.2.0a14, and it was found that an error occurred from Unity2023.2.0a15.

shiena avatar Jan 24 '24 10:01 shiena

A bug has been registered on the issue tracker. Please vote for early fix. https://issuetracker.unity3d.com/issues/windows-com-throws-the-invalidprogramexception-when-using-ookii-dot-dialogs-library

shiena avatar Jan 29 '24 08:01 shiena

"In progress" on issue tracker๐Ÿ™

Peter226 avatar Feb 14 '24 20:02 Peter226

Hi, is there any workaround? @shiena Did update to Ookii.Dialogs.WinForms help? Or we just need wait for unity fix?

zadinvit avatar Mar 01 '24 10:03 zadinvit

@zadinvit You can use OpenFileDialog with System.Windows.Forms.dll. However, the old style dialog is displayed.

shiena avatar Mar 01 '24 13:03 shiena

@shiena Were you able to use OpenFileDialog with System.Windows.Forms.dll?

Even with only this simple code, I have the following exception (Unity 2023.2.7f1 and 2023.2.12f1):

using System.Windows.Forms;

public class WindowsFileBrowser
{
    public static string BrowseFolderPanel(string initialSelectedPath = "")
    {    
        string filePath = string.Empty;    
        using (OpenFileDialog openFileDialog = new OpenFileDialog())
        {
            openFileDialog.InitialDirectory = initialSelectedPath;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                filePath = openFileDialog.FileName;
            }
        }
        return filePath;
    }
}
InvalidProgramException: Invalid IL code in (wrapper managed-to-native) System.Windows.Forms.FileDialogNative/IFileDialog:SetDefaultExtension (intptr,string): IL_000e: ldloc     65535
(wrapper cominterop) System.Windows.Forms.FileDialogNative+IFileDialog.SetDefaultExtension(string)
(wrapper cominterop-invoke) System.Windows.Forms.FileDialogNative+IFileDialog.SetDefaultExtension(string)
System.Windows.Forms.FileDialog.OnBeforeVistaDialog (System.Windows.Forms.FileDialogNative+IFileDialog dialog) (at <187ea5586d6f4ba8a9a85a7c10b078e1>:0)
System.Windows.Forms.FileDialog.RunDialogVista (System.IntPtr hWndOwner) (at <187ea5586d6f4ba8a9a85a7c10b078e1>:0)
System.Windows.Forms.FileDialog.RunDialog (System.IntPtr hWndOwner) (at <187ea5586d6f4ba8a9a85a7c10b078e1>:0)
System.Windows.Forms.CommonDialog.ShowDialog (System.Windows.Forms.IWin32Window owner) (at <187ea5586d6f4ba8a9a85a7c10b078e1>:0)
System.Windows.Forms.CommonDialog.ShowDialog () (at <187ea5586d6f4ba8a9a85a7c10b078e1>:0)
(wrapper remoting-invoke-with-check) System.Windows.Forms.CommonDialog.ShowDialog()
WindowsFileBrowser.BrowseFolderPanel (System.String initialSelectedPath) (at Assets/WindowsFileBrowser.cs:79)

anonymous2585 avatar Mar 04 '24 13:03 anonymous2585

@anonymous2585 I tried it with Unity2023.2.12f1 and the dialog worked. This is that Unity project. https://www.dropbox.com/t/52h90sq5zGbxrvvf

shiena avatar Mar 05 '24 17:03 shiena

Thanks a lot! With your project, I understood why I had the issue. My System.Windows.Forms.dll file comes from the .NET Framwork (version 4.8.4494.0, 5,64Mo) while yours is from Mono (version 4.6.57.0, 2,74Mo). With your version of the dll, it works! But the dialog is too ugly for me to give that to our clients ๐Ÿ˜

anonymous2585 avatar Mar 07 '24 11:03 anonymous2585

@anonymous2585 Yes, unfortunately in the mono version of FileDialog, the AutoUpgradeEnabled property does not work, so the old style dialog is displayed. https://github.com/Unity-Technologies/mono/blob/unity-main/mcs/class/System.Windows.Forms/System.Windows.Forms/FileDialog.cs#L387-L392 Therefore, you have two options: use Unity 2023.1 or earlier, or wait until the bug is fixed.

Also, the mono version of System.Windows.Forms.dll exists in the following path.

[Unity installed folder]\Editor\Data\MonoBleedingEdge\lib\mono\gac\System.Windows.Forms\4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll

shiena avatar Mar 07 '24 12:03 shiena

Nice to know that there is a workaround, even if the UI is a bit outdated.

Could you please create a branch (or Pull Request) for the workaround? This way one could easily use the workaround by changing the version of StandaloneFileBrowser to be used via Unity's manifest.json

Note that the workaround does not need to be merged into the master branch. Just having it available as a branch should suffice. And the branch can be deleted once Unity fixes the root problem.

achimmihca avatar Mar 08 '24 16:03 achimmihca

@achimmihca

diff --git a/Assets/StandaloneFileBrowser/StandaloneFileBrowserWindows.cs b/Assets/StandaloneFileBrowser/StandaloneFileBrowserWindows.cs
index 2bdb8c218..b1e379220 100644
--- a/Assets/StandaloneFileBrowser/StandaloneFileBrowserWindows.cs
+++ b/Assets/StandaloneFileBrowser/StandaloneFileBrowserWindows.cs
@@ -4,7 +4,13 @@ using System;
 using System.IO;
 using System.Windows.Forms;
 using System.Runtime.InteropServices;
+#if UNITY_2023_2_0 || UNITY_2023_2_1 || UNITY_2023_2_2 || UNITY_2023_2_3 || UNITY_2023_2_4 || UNITY_2023_2_5 || UNITY_2023_2_6 || UNITY_2023_2_7 || UNITY_2023_2_8 || UNITY_2023_2_9 || UNITY_2023_2_10 || UNITY_2023_2_11 || UNITY_2023_2_12 || UNITY_2023_2_13 || UNITY_2023_2_14 || UNITY_2023_2_15 || UNITY_2023_2_16 || UNITY_2023_2_17 || UNITY_2023_2_18 || UNITY_2023_2_19
+using VistaOpenFileDialog = System.Windows.Forms.OpenFileDialog;
+using VistaFolderBrowserDialog = System.Windows.Forms.FolderBrowserDialog;
+using VistaSaveFileDialog = System.Windows.Forms.SaveFileDialog;
+#else
 using Ookii.Dialogs;
+#endif
 
 namespace SFB {
     // For fullscreen support

shiena avatar Mar 11 '24 03:03 shiena

Yep, same issue with 2023.2+ ๐Ÿ˜” Thanks @shiena for the workaround! Has anyone found a way to display the more modern UI?

This repo seems to have last been updated over 6 years ago... Are we hopeful that there's even a remote chance that this gets fixed?

MadStark avatar Mar 18 '24 17:03 MadStark

@MadStark The AutoUpdateEnabled property is required to use the modern UI, but is not supported in the mono version. https://github.com/gkngkc/UnityStandaloneFileBrowser/issues/135#issuecomment-1983387557 Therefore, we need to call the native API, but unfortunately there is no workaround because the COM call causes an error.

shiena avatar Mar 18 '24 17:03 shiena

With the Mono System.Windows.Forms, I have the issue of Unity editor crashing whenever I close it after using the old window UI. Do you have the same thing?

MadStark avatar Mar 19 '24 16:03 MadStark

@MadStark Try copying Mono.Posix.dll and Mono.WebBrowser.dll to the Plugins folder with reference to #76 .

shiena avatar Mar 19 '24 17:03 shiena

@shiena Thanks! Unfortunately it didn't fix my issue... I think it might be interfering with other things in my project. After I open the browser, next time I will close Unity, it will crash instead! I'll do some digging!

MadStark avatar Mar 19 '24 17:03 MadStark

Perhaps https://github.com/Unity-Technologies/mono/pull/2003 will fix it.

shiena avatar Mar 21 '24 09:03 shiena

Perhaps https://github.com/Unity-Technologies/mono/pull/2003 will fix it.

Yes, that is exactly what that PR fixes :).

TautvydasZilys avatar Mar 21 '24 19:03 TautvydasZilys

Backports also merged into 2023.2 and 2023.3.

  • https://github.com/Unity-Technologies/mono/pull/2006
  • https://github.com/Unity-Technologies/mono/pull/2005

shiena avatar Mar 24 '24 07:03 shiena

I took some pull requests and repackaged them as upm. https://github.com/shiena/UnityStandaloneFileBrowser

shiena avatar Mar 24 '24 17:03 shiena

"Fixed in 6000.0.0b14" and "Fix In Review for 2023.2.20f1" on issue tracker

shiena avatar Apr 12 '24 01:04 shiena

UUM-62035 is included in the Fixes section of the release notes for Unity6000.0.0b15. And sure enough, the dialog comes up and no errors occur.

shiena avatar Apr 13 '24 08:04 shiena

Unity2023.2.20 also contains UUM-62035 in the Fixes section.

shiena avatar Apr 26 '24 07:04 shiena

Updated my project to 2023.2.20f1 and I confirm the issue is gone for me ๐Ÿ˜€

anonymous2585 avatar Apr 26 '24 09:04 anonymous2585