كيف يمكنني تشغيل تطبيق تم نشره بنقرة واحدة عند بدء التشغيل؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

كيف يمكنني جعل تطبيق تم نشره بنقرة واحدة يقوم بتشغيل بدء التشغيل؟

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

ماهي الخيارات التي لدي؟

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

المحلول

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

وعلى عكس ما يقول الكثير من المواد حول هذا الموضوع، فهي بسيطة للغاية لإعداد مفتاح لإطلاق بنقرة واحدة تطبيق ولا يتطلب إنشاء اختصارات إضافية. يمكنك ببساطة استخدام الاختصار إنشاؤها على تثبيت:

// The path to the key where Windows looks for startup applications
RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(
                    @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);

//Path to launch shortcut
string startPath = Environment.GetFolderPath(Environment.SpecialFolder.Programs) 
                   + @"\YourPublisher\YourSuite\YourProduct.appref-ms";

rkApp.SetValue("YourProduct", startPath);

نصائح أخرى

بعد قراءة جميع التعليقات على هذا الموضوع و منشور مدونة jonnycoder المذكور أعلاه, ، توصلت إلى حل وهو:

  1. يضيف تطبيق ClickOnce الخاص بك إلى مجلد بدء التشغيل
  2. إزالة عنصر بدء التشغيل تلقائيًا عند إلغاء تثبيت تطبيق ClickOnce (بعد إعادة التشغيل أو تسجيل الخروج/تسجيل الدخول)
  3. تم اختباره ويعمل على أنظمة التشغيل Windows XP، Windows 7، Windows Server 2000/2003، Windows 8

بلدي الحل

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

الخطوة 1

الحصول على الملف الدفعي العمل.استبدل PUBLISHER_NAME وAPPLICATION_NAME بالقيم الصحيحة.يمكنك العثور عليها عن طريق تثبيت تطبيق ClickOnce، ثم اتباع المسار إليه على نظام الملفات الخاص بك:

@echo off

IF EXIST "%appdata%\Microsoft\Windows\Start Menu\Programs\PUBLISHER_NAME\APPLICATION_NAME.appref-ms" (
"%appdata%\Microsoft\Windows\Start Menu\Programs\PUBLISHER_NAME\APPLICATION_NAME.appref-ms"
) ELSE (start /b "" cmd /c del "%~f0"&exit /b)

سيتحقق الملف الدفعي من تثبيت تطبيق ClickOnce الخاص بك (من خلال معرفة ما إذا كان الملف appref-ms موجودًا) وتشغيله إذا كان الأمر كذلك.وإلا فإن الملف الدفعي يحذف نفسه عبر إحدى الطرق المبينة هنا.

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

الخطوة 2

الآن، في التعليمات البرمجية لتطبيقك، تحتاج إلى كتابة هذا الملف الدفعي إلى مجلد بدء التشغيل.فيما يلي مثال على استخدام الملف الدفعي أعلاه في C# (لاحظ أن هناك بعض حالات الهروب والفودو لمتغير البيئة):

string[] mystrings = new string[] { @"@echo off

IF EXIST ""%appdata%\Microsoft\Windows\Start Menu\Programs\PUBLISHER_NAME\APPLICATION_NAME.appref-ms"" (
""%appdata%\Microsoft\Windows\Start Menu\Programs\PUBLISHER_NAME\APPLICATION_NAME.appref-ms""
) ELSE (start /b """" cmd /c del ""%~f0""&exit /b)"};

string fullPath = "%appdata%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\StartMyClickOnceApp.bat";

//Expands the %appdata% path and writes the file to the Startup folder
System.IO.File.WriteAllLines(Environment.ExpandEnvironmentVariables(fullPath), mystrings);

هذا هو الحال.التعليقات / التحسينات موضع ترحيب.

يحرر:اقتباسات ثابتة في الخطوة 2

وكل هذه الحيل لا يعمل على ويندوز فيستا للأسف. كتل فيستا هذه البرامج عند بدء التشغيل لسبب ما.

وكما اقترحthijs، يمكنك بسهولة تجاوز فيستا في "أمنية" على هذه الخطوة. انظر مشاركة المدونة على كيفية تشغيل تطبيقات clickonce على بدء التشغيل ويندوز .

وبفضل DiscDev وdbenham. الحل يعمل كبيرة. أردت فقط أن حصة رمز العمل المحدثة على أساس موعد أقصاه dbenham.

 const string fullPathEnvVar =
            "%appdata%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\StartMyClickOnceApp.bat";
 //Expands the %appdata% path
 string fullPath = Environment.ExpandEnvironmentVariables(fullPathEnvVar);

if (!File.Exists(fullPath))
        {
            string[] mystrings =
            {
                @"@echo off 
if exist ""%appdata%\Microsoft\Windows\Start Menu\Programs\<PublisherName>\<ApplicationName>.appref-ms"" (
""%appdata%\Microsoft\Windows\Start Menu\Programs\<PublisherName>\<ApplicationName>.appref-ms""
) else (
(goto) 2>nul & del ""%~f0""
)"
            };
            //write the file to the Startup folder
            File.WriteAllLines(fullPath, mystrings);
        }

أولا شكرا للإجابة Discdev. للحصول على هذا العمل مع Å Ä Ö وأحرف خاصة أخرى هذا التعديل فعل ذلك بالنسبة لي، وذلك باستخدام UTF-8 صفحة رموز مختلفة ولا BOM.

string[] mystrings = new string[] { "chcp 65001", @"IF EXIST ""%appdata%\Microsoft\Windows\Start Menu\Programs\<Publisher>\<App_Name>.appref-ms"" (""%appdata%\Microsoft\Windows\Start Menu\Programs\<Publisher>\<App_Name>.appref-ms"") ELSE (start /b """" cmd /c del ""%~f0""&exit /b)" };
string fullPath = "%appdata%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\StartErrandDynamicMenu.bat";
System.Text.Encoding utf8WithoutBOM = new System.Text.UTF8Encoding(false);
System.IO.File.WriteAllLines(Environment.ExpandEnvironmentVariables(fullPath), mystrings, utf8WithoutBOM);

في شروط الحصول على الواقع تطبيق لإطلاق عند بدء التشغيل، وجود رابط في مجلد بدء التشغيل هو أفضل رهان. أو إن لم يكن مجلد بدء التشغيل ثم اضغط على مفتاح بدء التشغيل ريج.

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

وهناك قضية على الرغم من أن حذف الآن التطبيق ClickOnce سيتم حذف أنه لم يعد في الواقع. سوف ClickOnce لا تتبع ارتباط يدوي وأضاف، وبالتالي في كل مرة شخص إلغاء تثبيت التطبيق الخاص بك وإعادة تمهيد فإنه سيتم إعادة تثبيت. وأود أن تبدأ بالنظر إلى أن البرنامج لا يتصرف جيدا :(.

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

في حالة أنه يساعد أي شخص آخر لا تزال تبحث عن حل لهذه طريقة تعليق أسفل أسفل <لأ href = "http://johnnycoder.com/blog/2009/02/24/clickonce-run-at-startup / "يختلط =" نوفولو "> http://johnnycoder.com/blog/2009/02/24/clickonce-run-at-startup/ يقترح وضع ClickOnce نشر خيارات (في VS.Net 2010 هذا على خصائص المشروع، نشر الشاشة والخيارات) مع اسم الناشر وضع بدء التشغيل واسم الجناح فارغا. أن لا تحصل على اختصار البرنامج في مجلد بدء التشغيل بالنسبة لي على ويندوز 7. أنا لا أعرف ما إصدارات أخرى من Windows القيام به.

لسبب ما، ويندوز لن تبدأ بلدي التطبيق (الملف ".appref مللي") عند تسجيل الدخول. لذلك، خطرت لي حل بعضها الآخر قد تجد مفيدة كذلك.

عند تثبيت التطبيق الخاص بي لأول مرة (وعلى بدء التطبيق بلدي)، أود أن أضيف / التحقق من أن التطبيقات الحالية بلدي string.Concat(Application.ExecutablePath, " ", "/startup") موقع موجود في "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" التسجيل. عندما يبدأ تطبيق ذلك الحين، وتحقق من وسائط ل "/ بدء التشغيل" وإذا كان هذا هو الحاضر، تنفيذ التعليمات البرمجية التالية.

var startMenuFile = Path.Combine("Programs", Company, Product + ".appref-ms");
var startMenuFolder = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
var fileName = Path.Combine(startMenuFolder, startMenuFile);

if (File.Exists(fileName))
{
    Process.Start(fileName);
    return;
}

// Log that for some reason, the application doesn't exist.

وهذا عمل عظيم بالنسبة لي. ولكن، إذا كنت فقط بإضافة قيمة Application.ExecutablePath إلى التسجيل دون حجة "/startup"، سيبدأ التطبيق عند بدء تشغيل ويندوز ولكن ليس في سياق تطبيق "انقر مرة واحدة". وهذا لن تسمح لك بالوصول إلى ApplicationDeployment.CurrentDeployment. وعلى الرغم من هذا العمل العظيم، والمشكلة لا يزال موجودا أنه عندما يتم إلغاء طلبي، لا يتم إزالة إعداد التسجيل. هذا يمكن ان تكون ثابتة باستخدام Ivan Leonenko إلغاء العرف حل. ويساعد هذا الأمل ...

وأنا أجعل هذا العمل بالنسبة لي و

 Sub AddToStartup()
    If My.Application.IsNetworkDeployed Then


        Dim str As String = My.Application.Deployment.UpdatedApplicationFullName.ToString

        Dim saida As String = ""

        For i As Integer = 0 To str.Split(",").Length

            If Not saida.Contains("msil") Then
                saida += str.Split(",")(i) & ", "
            End If
        Next

        If saida.Contains("msil") Then
            saida = saida.Substring(0, saida.Length - 2)
        End If

        Dim name As String = My.Application.Info.Title
        Dim file As String = Path.Combine(My.Application.Info.DirectoryPath, name & ".appref-ms")
        My.Computer.FileSystem.WriteAllText(file, saida, False)

        Dim reg As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", True)
        reg.SetValue(name, file)

    End If


End Sub
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top