كيف يمكنك إنشاء اختصار تطبيق (ملف .lnk) في C # مع وسيطات سطر الأوامر

StackOverflow https://stackoverflow.com/questions/1501608

  •  19-09-2019
  •  | 
  •  

سؤال

لقد كتبت برنامج مزامنة ملفات بروتوكول نقل الملفات بسيطة. يمكن تخزين الإعدادات التي يمكن تخزينها في ملف XML. أريد أن يكون المستخدمون قادرين على فتح البرنامج بسرعة باستخدام تكوينات مختلفة. لذلك قمت بإعداد البرنامج لتكون قادرا على قراءة المسار إلى ملف التكوين من خلال وسيطة سطر الأوامر. يمكن إنشاء اختصارات بهذه الطريقة على سطح المكتب بناء على ملفات التكوين المختلفة. الآن أحاول إضافة ميزة ستقوم تلقائيا بإنشاء الاختصار لملف تكوين معين.

لقد حاولت استخدام المثال من هذا المشنور باستخدام chelllink.cs. وقد حاولت أيضا استخدام iwshruntimelibrary كما هو موضح هنا. وبعد أنا قادر على إنشاء الاختصار، لكن "النوع المستهدف" من الاختصار في نافذة الخصائص ينتهي بك الأمر فارغا في الاختصار الجديد. إذا قمت بالنقر المزدوج فوق الاختصار أحصل على نافذة خطأ من Windows حولها تواجه مشاكل في العثور على foobar.xml عند المسار المقدم. لذلك يبدو أنه لا يدرك أنه يجب أن يبدأ تطبيق لا يفتح ملف.

الآن، إذا قمت بفتح خصائص الاختصار الجديد وتغيير شيء ما في الحقل المستهدف، ثم قم بتغييره مرة أخرى. على سبيل المثال حذف X من XML ثم أضفه فقط. بعد انقر فوق "موافق أيقونة الاختصار" على الفور تبديل رمز التطبيق الخاص بي، ويعمل بشكل صحيح عند النقر المزدوج.

لذلك يبدو أنه عندما أقوم بتحرير الاختصار يدويا، فهو يفرض نوافذ للتحقق مما إذا كان يجب أن يكون نوع الهدف الاختصار هو تطبيق وتبديله.

إذا كيف يمكنني ذلك، من خلال C #، قم بإنشاء اختصار جديد مع نوع مستهدف من التطبيق عندما لا ينتهي المسار المستهدف مع .exe؟

هل كانت مفيدة؟

المحلول

ستحتاج إلى إضافة مرجع COM إلى Windows Scripting المضيف. AFAIK، لا توجد طريقة أصلية .NET للقيام بذلك.

ستقوم هذه العينة بإنشاء اختصار على سطح المكتب. سيتم تشغيل تطبيق FTP، باستخدام ملف XML تعيين كوسيطة سطر الأوامر. فقط قم بتغيير القيم إلى ما تحتاجه.

        WshShellClass wsh = new WshShellClass();
        IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut.lnk") as IWshRuntimeLibrary.IWshShortcut;
        shortcut.Arguments = "c:\\app\\settings1.xml";
        shortcut.TargetPath = "c:\\app\\myftp.exe";
        // not sure about what this is for
        shortcut.WindowStyle = 1; 
        shortcut.Description = "my shortcut description";
        shortcut.WorkingDirectory = "c:\\app";
        shortcut.IconLocation = "specify icon location";
        shortcut.Save();

مع هذا الرمز، يتم ملء نوع الهدف بشكل صحيح كأداة وسيتم تشغيل التطبيق مع Settings1.xml كوسيطة سطر الأوامر. من سؤالك، أعتقد أن هذا هو ما تحاول القيام به. ومع ذلك، لا أعتقد أنه يمكنك إنشاء اختصار ل، دعنا نقول فقط ملف XML، والحصول على مجموعة نوع الهدف كأداة.

ل .NET 4.0 وما فوق، استبدل السطر الأول مع ما يلي (بفضل ميلي سميث!):

        WshShell wsh = new WshShell();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top