Arama butonu
Bu konudaki kullanıcılar: 1 misafir
6
Cevap
213
Tıklama
0
Öne Çıkarma
Birkaç setup'ı sadece bir exe ile kurdurtmak
R
3 yıl
Er
Konu Sahibi

Merhaba,

Bilgisayara format attıktan sonra winrar, chrome ve diğer birçok programın setuplarını tek tek kurmaktansa hepsini tek bir program içerisinde toplayıp kurdurtmak istiyorum. Bunu visual studio'dan resimde gösterdiğim şekilde yapabilir miyiz?


< Resime gitmek için tıklayın >



G
3 yıl
Yarbay

yaparsın da bileceğin şey programların sessiz kurulum anahtarlarına bakmak genelde /s parametresi çoğu setupda geçerlidir.
bir de niye visual studio içinde yani bir batch dosyası bile işini görür

vs de komut kısmına uygulamanın yolunu yazarsın parametre ile birlikte

string winrar = "...";
var process = Process.Start(winrar);
process.WaitForExit();



kullanırsın



R
3 yıl
Er
Konu Sahibi

@Gökşen PASLI

.BAT dosyası ile yapılabilir mi tam bilmiyorum ancak yapmak istediğim şey tam olarak şöyle;

Ortamda bizim oluşturacağımız yeni .exe dışında her hangi bir program, set-up olmayacak.
Programı açtığımızda karşımıza yukarıdaki görseldeki gibi seçenekler gelecek ve indirmek istediklerimizi seçtikten sonra seçili olanları bilgisayarımıza kuracak.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Gökşen PASLI
T
3 yıl
Yarbay

Bence .bat dosyası bu işi görür çünkü Windows'ta buna benzer birkaç iş için biz de .bat dosyası kullanıyoruz, yıllardır sorunsuz çalışıyor. Doğru yazmak koşuluyla. .bat oldukça güvenilir bir sistem. Form'daki seçenekler içinse, .bat betiğini parametrik yapıp, formdaki seçenekleri parametrelere aktarırsın.



< Bu ileti mini sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @Raimondex
R
3 yıl
Er
Konu Sahibi

@vonderplanitz

Konuyu .bat dosyası ile çözebilmem için yardımcı olabilir misiniz? .bat dosyası yazmadım daha önce. Google'da araştırdım ancak istediğim konuya çıkacak bir sonuç bulamadım.

Discord: Raimondex#2870


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
3 yıl
Yarbay

Google 'da birkaç setup'ı çalıştıran .bat dosyası gibi amaca özel .bat pek bulunmaz, kendiniz yazmalısınız. O aşamadahttps://en.wikibooks.org/wiki/Windows_Batch_Scripting gibi kaynakları incelemeniz gerekebilir.



< Bu ileti mini sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @Raimondex
G
3 yıl
Yarbay

örnek uygulama basitçe ; ayraçtır
ilki uygulama yolu
ikincisi sessiz kurulum parametresi olacak sen internetten bulacaksın gelende /s dir.
true false seçili veya değil olması
dördüncüsü görünen addır
örnekte Data.txt içeriği exe ile yan yana aynı klasörde olacak
cleanmgr.exe;/sageset:1;true;Disk Temizleyici
calc.exe;/s;false;Hesap Makinesi
cmd.exe;/k;true;Komut Satırı

mainwindow.xaml içeriği
<Window x:Class="Installer.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Installer"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="Yükleyici" Width="800"
Height="450" mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListBox d:ItemsSource="{d:SampleData ItemCount=5}"
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding Datas}"
SelectionMode="Extended">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding Selected}" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox VerticalContentAlignment="Center" IsChecked="{Binding Selected}">
<Image Source="{Binding Icon}" />
</CheckBox>
<TextBlock VerticalAlignment="Center" Text="{Binding AppName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Grid.Row="1" Click="Button_Click" Content="SEÇİLİLERİ KUR" />
</Grid>
</Window>



mainwindow.xaml.cs içeriği

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media.Imaging;

namespace Installer
{
public class Data : INotifyPropertyChanged
{
private string appName;

private BitmapSource ıcon;

private string param;

private string path;

private bool selected;

public event PropertyChangedEventHandler PropertyChanged;

public string AppName
{
get => appName;

set
{
if (appName != value)
{
appName = value;
OnPropertyChanged(nameof(AppName));
}
}
}

public BitmapSource Icon
{
get => ıcon; set

{
if (ıcon != value)
{
ıcon = value;
OnPropertyChanged(nameof(Icon));
}
}
}

public string Param
{
get => param; set

{
if (param != value)
{
param = value;
OnPropertyChanged(nameof(Param));
}
}
}

public string Path
{
get => path;

set
{
if (path != value)
{
path = value;
OnPropertyChanged(nameof(Path));
}
}
}

public bool Selected
{
get => selected; set

{
if (selected != value)
{
selected = value;
OnPropertyChanged(nameof(Selected));
}
}
}

protected virtual void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

public partial class MainWindow : Window
{
private static readonly IntPtr hwnd = Process.GetCurrentProcess().Handle;

public MainWindow()
{
InitializeComponent();
DataContext = this;

Datas = new List<Data>();
foreach (string item in File.ReadAllLines("data.txt"))
{
Datas.Add(new Data()
{
Path = item.Split(';')[0],
Param = item.Split(';')[1],
Selected = bool.Parse(item.Split(';')[2]),
AppName = item.Split(';')[3],
Icon = IconCreate(item.Split(';')[0], 0)
});
}
}

public List<Data> Datas { get; set; }

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool DestroyIcon(IntPtr handle);

[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);

public BitmapSource IconCreate(string filepath, int iconindex)
{
if (filepath != null)
{
string defaultIcon = filepath;
IntPtr hIcon = ExtractIcon(hwnd, defaultIcon, iconindex);
if (hIcon != IntPtr.Zero)
{
BitmapSource icon = Imaging.CreateBitmapSourceFromHIcon(hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
_ = DestroyIcon(hIcon);
icon.Freeze();
return icon;
}

_ = DestroyIcon(hIcon);
}

return null;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
foreach (Data item in Datas.Where(z => z.Selected))
{
Process.Start(item.Path, item.Param).WaitForExit();
}
}
}
}





< Bu mesaj bu kişi tarafından değiştirildi Gökşen PASLI -- 17 Haziran 2022; 21:25:36 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.