-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Update BclLauncher.cs to use ArgumentList property #19713
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Using the ArgumentList property avoids having to escape spaces and special characters, which would otherwise cause the open command to fail and either split the argument string or not find the required files and folders with special characters.
ArgumentList is not available in all .net versions it seems some manual parsing will have to be used instead. |
Please read the following Contributor License Agreement (CLA). If you agree with the CLA, please reply with the following:
Contributor License AgreementContribution License AgreementThis Contribution License Agreement ( “Agreement” ) is agreed to by the party signing below ( “You” ), 1. Definitions. “Code” means the computer software code, whether in human-readable or machine-executable form, “Project” means any of the projects owned or managed by AvaloniaUI OÜ and offered under a license “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any “Submission” means the Code and any other copyrightable material Submitted by You, including any 2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any 3. Originality of Work. You represent that each of Your Submissions is entirely Your 4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else 5. Licenses. a. Copyright License. You grant AvaloniaUI OÜ, and those who receive the Submission directly b. Patent License. You grant AvaloniaUI OÜ, and those who receive the Submission directly or c. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement. 6. Representations and Warranties. You represent that You are legally entitled to grant the above 7. Notice to AvaloniaUI OÜ. You agree to notify AvaloniaUI OÜ in writing of any facts or 8. Information about Submissions. You agree that contributions to Projects and information about 9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the Republic of Estonia, and 10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and AvaloniaUI OÜ dedicates this Contribution License Agreement to the public domain according to the Creative Commons CC0 1. |
Note that there is a plan to remove .NET Framework and .NET Standard 2.0 support for Avalonia 12. When that is done ArgumentList can be used without issue. |
@cla-avalonia agree |
I have tried various solutions to escaping the file and directory paths using ProcessStartInfo.Argument on macos, but been unable to figure out a comprehensive method that works with all valid macos path names:
Paths with spaces and quotes:
Paths with backslash: I'll give it another try when I get back to my dev mac next week. |
Attempting to open files and folders on MacOs with spaces or special characters in the path using Launcher.LaunchFileAsync fails due to incorrect parsing of the arguments property of ProcessStartInfo.
Using the ArgumentList property avoids having to escape spaces and special characters, which would otherwise cause the open command to fail and either split the argument string or not find the required files and folders with special characters.
What does the pull request do?
Fixes a bug that prevents Launcher.LaunchFileAsync from opening files and folders with spaces or special characters in the path name on MacOS.
What is the current behavior?
When attempting to open a path with spaces, the method returns true, but no file or folder is opened since the file path is treated as multiple arguments to the open command, "The files part1, part2, etc. do not exist" is printed to the debug console since the split arguments will usually not represent valid paths. Similarly paths with quotes or other special characters (valid in macos paths) can return "The file XYZ does not exist".
What is the updated/expected behavior with this PR?
Correctly opening files and folders with spaces or special characters their path.
To test run:
Tested and functions correctly on macos with path:
/Users/username/Documents/_TEST/appname/TestProjects/AvaloniaLauncherBugTest/AvaloniaLauncherBugTest/Test folder |&;()<>~*@?!$#[]{}'
Also tested on Windows 11 and works correctly.
How was the solution implemented (if it's not obvious)?
In static method BclLauncher.Exec, instead of passing urlOrFile to the Argument property, on MacOS it is passed via ArgumentList.Add (no argument is passed on Windows).
Checklist
Fixed issues
Fixes #19702 as well as any issues with special characters on macOS.