我已经安装了Chocolatey,但我希望将程序安装到另一个驱动器而不是C.C只是一个小型SSD,但我有其他驱动器,我通常安装程序。
有什么想法吗?
答案 0 :(得分:15)
对于每个应用程序,您需要知道在安装期间使用的命令行开关,以更改其安装目录并使用--installArgs
传递它。请参阅 Install Command (choco install) 和 Overriding default install directory or other advanced install concepts 。
确保不同驱动器的另一种方法是将Program Files
重新定位到其他驱动器。你可能想看一下;有可能做到。
我们添加了无处不在的安装开关!如果您需要覆盖安装目录并且您不想完成所有工作以确定该开关是什么,您可以选择使用一个带有Chocolatey的开关 - Ubiquitous Install Directory Option (Licensed Editions Only)
注意:我们需要以某种方式确保Chocolatey社区的寿命,那就是拥有FOSSium(免费增值)模型。 Pro版本每月8美元(每年96美元),每月花费少于外出就餐,获得一些很棒的功能,并确保社区基础设施继续提供优质服务和改进。当您使用免费服务(社区存储库,又名https://chocolatey.org/packages)时,提供该服务并不是免费的。因此,我们选择某些高级功能进入这些版本,以提供足够的价值,使其物有所值。
答案 1 :(得分:8)
您可以将Chocolatey目录移动到其他位置,然后从默认位置创建硬符号链接 - 请参阅 The Complete Guide to Creating Symbolic Links (AKA Symlinks) on Windows 。
即。 mklink /J C:/ProgramData/chocolatey D:/my/new/location
但在做任何事情之前一定要创建通常的备份,还原点等。
答案 2 :(得分:5)
对于MSI包(在Windows中最常见的情况),请使用:
choco install package-name --% -ia INSTALLDIR="c:\intall\path"
要查看该软件包是否为MSI,请在Chocolatey软件包页面的 Files 下,查找chocolateyInstall.ps1
,然后查找:
fileType = 'msi'
使用Strawberry Perl进行了测试。
当然,您可以随时使用付费巧克力,并从无处不在的安装开关中受益。
答案 3 :(得分:4)
看起来,Chocolatey现在创造了一个无处不在的开关:
Ubiquitous Install Directory Option (Licensed Editions Only)
我没有机会亲自使用它,但看起来这样就可以了。如果每个应用程序有一点手动。
答案 4 :(得分:4)
我发现了另一个简单的技巧 - 像往常一样安装choco,并在安装后立即将c:\programdata\chocolatey
目录移动到您喜欢的任何位置,然后更新ChocolateyInstall
环境变量并更新{{1环境变量所以choco' s \ bin子文件夹在移动后找到。
当然,我不知道其他任何软件包是否合适,但我只是安装了7zip和docker-machine而没有任何问题,所以似乎有效。
答案 5 :(得分:2)
对于免费版本,您必须将目录作为附加的 i 输入 a 参数传递:
choco install theapp -y --ia "folder switch"
挑战在于,安装程序与安装程序之间的切换有所不同。
tools\chocolateyInstall.ps1
。如果没有此类文件,请返回搜索该应用程序的“ ... .installer”版本。搜索fileType = exe
。我大多数经过测试的应用都是这种情况(请参见下文)。如果是这种情况,请搜索silentArgs
。如果有:
/S
:使用--ia "/D=C:\new\path
。注意:单反斜杠,双反斜杠对我不起作用。同样,在=
符号前的 no 反斜杠也给我带来了一个错误。 /VERYSILENT
:使用--ia /DIR=C:\new\path
。非常安静的开关属于InnoSetup安装程序。something else
:google“应用程序无提示安装”,确定路径切换并相应输入:--ia "..."
fileType = msi
:使用--ia INSTALLDIR="C:\new\path"
(我没有对此进行测试)
进行非静默分期付款:choco install theapp --notsilent
我编写了一个powershell脚本,该脚本可以将应用程序安装在其默认位置,也可以安装到新的位置(由您提供)。应用程序作为字典提供,其中包含package-name
和key
,input arguments
和value
。请注意单引号和双引号。
# --------------------------------------------------------------
# If installation should be in specific path, then provide it as value in the Dict / Hash table.
# Additional choco installer switches have to be set after the path.
$packToInstall= @{
notepadplusplus='';
vlc=''; # Install Dir can only be set via registry
irfanview='';
irfanviewplugins='';
teamviewer='/D=D:\Programme\choco\TeamViewer"';
vscode='"/DIR=D:\Programme\choco\vsCode" /NoDesktopIcon /NoQuicklaunchIcon';
'cpu-z.install'='"/DIR=D:\Programme\choco\cpu-z" ';
}
# --------------------------------------------------------------
# -------------- Script Start ----------------------------------
ForEach($key in $packToInstall.Keys){
if ($packToInstall[$key]) {
choco install $key -y --ia $packToInstall[$key]
}
else {
# Default installer
choco install $key -y
}
}
另存为script.ps1并以管理员身份运行。如果执行策略使您感到麻烦:PowerShell.exe -ExecutionPolicy UnRestricted -File .\script.ps1
(由于得分高,我无法直接发表评论)
答案 6 :(得分:0)
除了@antonio's answer之外,我还想将我的发现用于设置安装目录的其他情况。
对于fileType = 'exe'
,似乎有两种安装程序可以与给定的silentArgs
区别开来(同样在chocolateyInstall.ps1
中)。
到目前为止,我发现/S
是silentArgs,并且以/VERYSILENT /NORESTART
(似乎是InnoSetup安装程序)开头的内容更长。
/S
:经过测试,我发现它可以正常工作(例如7zip):choco install 7zip.install -y --ia "/D\=D:\Destination\"
(注意:这还会触发调试输出。如果您有解决方案,请告诉我!)/VERYSILENT /NORESTART ...
:尽管我不确定如何应用,但根据InnoSetup Installer CLI docs,该开关应为/DIR=<path>
。许多安装程序也不使用以上任何一种。例如,VirtualBox需要某些安装参数,jdk8软件包中的参数将以这种方式设置目录等。如果您无法将silentArgs
和fileType
与上面的内容进行匹配,则您需要做一些研究。 br />
对于VirtualBox,我使用/?
运行了安装程序,并弹出了一个对话框,解释了可以添加的参数。
对于Mozilla Firefox,我发现了一个社区帖子,其中解释了允许安装程序使用哪些标志和开关。
答案 7 :(得分:0)
accepted answer已经暗示了此选项,因此我仅出于完整性考虑而发布:
尽管近年来SSD变得越来越大和便宜,但仍有一些利基用例,您希望将Windows安装在单独的较小分区上,而将软件安装在另一个更大的分区上。
using log4net.Appender;
using log4net.Core;
using System.IO;
using System.Net.Mail;
namespace FxCore.Diagnostics.Components
{
public class SMTPAppender : BufferingAppenderSkeleton
{
public string To { get; set; }
public string From { get; set; }
public string Subject { get; set; }
public string SmtpHost { get; set; }
public string Port { get; set; }
protected void SendEmail(string messageBody)
{
SmtpClient client = new SmtpClient(SmtpHost);
client.UseDefaultCredentials = false;
client.Port = int.Parse(Port);
using (MailMessage mailMessage = new MailMessage())
{
mailMessage.From = new MailAddress(From);
mailMessage.To.Add(To);
mailMessage.Body = messageBody;
mailMessage.Subject = Subject;
client.Send(mailMessage);
}
}
protected override bool RequiresLayout => true;
protected override void SendBuffer(LoggingEvent[] events)
{
StringWriter writer = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
string t = Layout.Header;
if (t != null)
{
writer.Write(t);
}
for (int i = 0; i < events.Length; i++)
{
// Render the event and append the text to the buffer
RenderLoggingEvent(writer, events[i]);
}
t = Layout.Footer;
if (t != null)
{
writer.Write(t);
}
SendEmail(writer.ToString());
}
}
}
并输入win + R
regedit
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
和ProgramFilesDir
从ProgramFilesDir (x64)
更改为C:\ProgramFiles
引用我的来源:this answer but longer。
巧克力通常会尊重这一点-但有一些关于该方法的注意事项:
[your drive]:\Program Files
注册表项。例如,Audacity仍安装在ProgramFilesDir
上(尽管-在我看来,至少-{{ 1}}是C:
,但Chocolatey假定在制作快捷方式和开始菜单条目时已将其安装到ProgramFilesDir
。F:\Program Files
注册表项 ,否则某些脚本,软件包或程序可能会损坏(例如,我必须重新安装{{1 }}程序包)边注:此答案在“如何设置巧克力以将应用程序安装到另一个驱动器上”的假设下进行操作,意味着“如何设置巧克力以将应用程序安装到安装了大多数其他软件的同一驱动器上。 “
答案 8 :(得分:0)
使用 ChocolateyToolsLocation
环境变量。
程序本身保持原样,但所有 choco 安装都安装在 D:\tools
。
或者另一个环境变量:
ChocolateyInstall
:D:\ProgramData\chocolatey
来源: