Если вы хотите связать файл с расширением (.magi) с вашим приложением WPF, я советую вам использовать InnoSetup для этого.
Например, я разработал приложение WPF под названием MAGI. Мы связываем значок с файлом « .magi», и когда пользователь щелкает файл « .magi», он запускает приложение и открывает его непосредственно в приложении.
Используйте InnoSetup для легкого изменения реестра
Просто добавьте эту инструкцию в ваш файл:
[Setup]
ChangesAssociations=yes
[Registry]
Root: HKCR; Subkey: ".magi"; ValueType: string; ValueName: ""; ValueData: "MyMAGIApplication"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "MyMAGIApplication"; ValueType: string; ValueName: ""; ValueData: "Program MAGI"; Flags: uninsdeletekey
Root: HKCR; Subkey: "MyMAGIApplication\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MAGI.EXE,0"
Root: HKCR; Subkey: "MyMAGIApplication\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MAGI.EXE"" ""%1"""
Разобрать аргументы в методе "Запуск"
Мы используем свойство Startup
в основном Xaml, чтобы вызывать ваш синтаксический анализатор как полезный метод main.
<Application x:Class="MAGI.View.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="AppStartupMainMagi" >
</Application>
И в коде позади мы добавляем этот метод
/// <summary>
/// Call with Startup property in App.xaml
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AppStartupMainMAGI(object sender, StartupEventArgs e)
{
String[] arguments = Environment.GetCommandLineArgs();
if (arguments.GetLength(0) > 1)
{
if (arguments[1].EndsWith(".magi"))
{
string filePathFormMainArgs = arguments[1];
if(isFileMagiValid(filePathFormMainArgs))
{
// Step 1 : deserialize filePathFormMainArgs
// Step 2 : call the view "File oepn" in the application"
}
}
}
else {
// Call the view "welcome page application"
}
}