Eri*_*ins 24 .net clickonce startup
如何使Click-once部署的应用程序运行启动?
我通过搜索找到的最佳选项是将应用程序上的Publisher设置为Startup,因此Start菜单快捷方式将放在Startup文件夹中,但这似乎是一个巨大的黑客,我希望有一个开始菜单图标人可以找到.
我有什么选择?
Don*_*ott 26
我觉得将您的应用程序添加到启动文件夹是不专业的.我强烈建议使用启动注册表项来启动您的应用程序.
与此主题的许多材料相反,设置密钥以在应用程序启动单击时非常简单,并且不需要设置其他快捷方式.您只需使用在安装时创建的快捷方式:
// 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);
Run Code Online (Sandbox Code Playgroud)
Dis*_*Dev 12
在阅读了上述线程和上面提到的johnnycoder博客文章的所有评论之后,我想出了一个解决方案:
我的解决方案
基本上,您的应用程序将把.bat文件写入Startup文件夹,为您启动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)
Run Code Online (Sandbox Code Playgroud)
批处理文件将检查您的ClickOnce应用程序是否已安装(通过查看appref-ms文件是否存在)并启动它(如果存在).否则,批处理文件将通过此处概述的方法删除自身.
现在您已拥有批处理文件,请将其测试出来.将其放在Startup文件夹中,以确保它在登录时启动您的应用程序.
第2步
现在,在应用程序的代码中,您需要将此批处理文件写入Startup文件夹.下面是在C#中使用上面的批处理文件的示例(请注意,有一些转义,环境变量voodoo正在发生):
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);
Run Code Online (Sandbox Code Playgroud)
你有它.欢迎评论/改进.
编辑:修正了第2步中的引号
小智 5
不幸的是,所有这些技巧都不适用于Vista.出于某些原因,Vista会在启动时阻止这些程序.
正如@thijs所建议的那样,你可以轻松地绕过vista的"安全性".请参阅blogpost,了解如何在Windows启动时运行clickonce应用程序.