2016-03-22 10 views
2

Bağımsız bir Chocolatey paketi yapıyorum. Paket klasörü aşağıdakileri içerir: app.nuspec, app.exe, app.nupkg ve tools alt klasörü. chocolateyInstall.ps1 şu şekildedir:Chocolatey paketindeki bir EXE'yi chocolateyInstall.ps1'den nasıl kullanabilirim?

$packageName = 'app' 
$fileType = 'exe' 
$silentArgs = '/VERYSILENT' 
$url = '../app.exe' # the location of the file relative to the tools folder 

Install-ChocolateyPackage $packageName $fileType $silentArgs $url 

Ben çalıştırın:

choco install app -y 

alıyorum:

Copy-Item : cannot find the path C:\ProgramData\app.exe because does not exist 

nasıl bu iş yapabilirsiniz

? 'Şimlerle kendi kendine yeten bir paket yarat' hakkında biraz okudum ama bunu nasıl kullanacağımı anlamıyorum. Herhangi bir yardım? Ben de burada bu başka bir çözüm çalışır ( http://patrickhuber.github.io/2015/03/19/creating-enterprise-versions-of-public-chocolatey-packages.html) bulduk 1

DÜZENLEME teşekkür ederim. Yani benim durumumda olurdu:

$directory = $PSScriptRoot 
$packageName = 'app' 
$fileType = 'exe' 
$silentArgs = '/VERYSILENT' 
$url = Join-Path $directory '..\app.exe'  


Install-ChocolateyPackage $packageName $fileType $silentArgs $url 

Ben $PSScriptRoot değişken nedir merak ediyorum?

+0

Göreli yollar ile çalışmaz. Gary'nin cevabına bir bakın. Ayrıca, “choco new pkgname” in bu hakkı elde etmek için ihtiyacınız olan her şeyi ürettiğini unutmayın. – ferventcoder

+1

'$ PSScriptRoot',' $ (Split-Path $ MyInvocation.MyCommand.Path) 'ile aynıdır, ancak PowerShell v3 + 'da kullanılabilen bir otomatik değişkendir. Eski yöntemi kullanmanizi öneririz - sadece sadece 3+ (yani Windows 8/Windows 2012 ve üstü veya tüm makinelerinizde WMF'ye sahip olan makineler varsa) varsa, sorun olmadan "$ PSScriptRoot" kullanmakta fayda var demektir . – ferventcoder

cevap

3

exe ​​/ msi'yi içeren bir Chocolatey Paketi yapmak için, Install-ChocolateyPackage yardımcı yönteminden ziyade Install-ChocolateyInstallPackage yardımcı yöntemini kullanabilirsiniz. Bu, Chocolatey Wiki here

'da belgelenmiştir. Bu, exe/msi'yi indirmek/indirmek istememesi haricinde, diğer yardımcı yöntemle aynı şekilde çalışır. Sağlandığı yolu kullanır ve buradan yükler.

Çok benzer bir şey olan ChocolateyGUI package'da neyin gerekli olduğunu gösteren tam bir örnek bulabilirsiniz.

bunun püf noktası referans için aşağıda gösterilmiştir:

$packageName = 'ChocolateyGUI' 
$fileType = 'msi' 
$silentArgs = '/quiet' 
$scriptPath = $(Split-Path $MyInvocation.MyCommand.Path) 
$fileFullPath = Join-Path $scriptPath 'ChocolateyGUI.msi' 

Install-ChocolateyInstallPackage $packageName $fileType $silentArgs $fileFullPath 
+1

lütfen düzenlemeyi kontrol edin. Şimdi kodunuzu deneyeceğim .. – diegus

2

nasılsa biz hala komut-ve arayan ilişkin yollarla açıklamasını kaçırıyorsun. Bu durumda, chocolatey

%PROGRAMDATA%\Chocolatey\choco.exe 

Sizin komut yürütülürken bir düzey yukarı gidip app.exe aramaya bunu anlatıyor, o Gary'nin cevabı $MyInvocation kullanarak, ima Ne

%PROGRAMDATA%\app.exe 

ihtiyacınız olduğunu var komut dosyasının konumuna göre bu yolu oluşturmak için, arayanın yerini değil. Yolu $PSScriptRoot ile birleştirerek başka bir yöntem buldunuz.

Her iki değişken de "Automatic variables" olarak bilinir.

ad, parametreler, parametre değerlerinin ve komut denilen veya başlandı hakkında bilgi gibi güncel komutu hakkında bilgi içerir $ MyInvocation

"çağrılır" gibi Geçerli komut olan adlı komut dosyasının adı.

$ MyInvocation yalnızca komut dosyaları, işlev ve kod blokları için doldurulur. Bu bilgileri System.Management.Automation.InvocationInfo nesnesinde, $ MyInvocation öğesinin geçerli komut dosyasında (örneğin, yolunu ve komut dosyasının dosya adı ($ MyInvocation.MyCommand.Path)) döndürdüğünü veya bir Geçerli komutu tanımlamak için işlevi ($ MyInvocation.MyCommand.Name). Bu, geçerli komut dosyasının adını bulmak için özellikle kullanışlıdır.

Ve

$ PSScriptRoot

bir komut dosyası çalıştırılmakta olduğu dizini içerir.

Windows PowerShell 2.0'da, bu değişken yalnızca (.psm1) komut dosyası modüllerinde geçerlidir. Windows PowerShell 3.0'dan başlayarak, tüm komut dosyalarında geçerlidir.

+0

Açıklamanız için teşekkürler ... Şimdi bana daha mantıklı gelsin – diegus

İlgili konular