Program C# z własnymi dźwiękami, a tworzenie dla niego installatora.

0

Witam!
Napisałem sobie prostą apkę, nie zagłębiając się w szczegóły, gdy odliczanie się skończy ma być odtwarzany odpowiedni dźwięk. Wszystko działa tylko doszedłem do momentu kiedy chce ją sobie opublikować, podesłać znajomym bla bla.
I w tym momencie pojawia się problem. Chce zrobić instalator aplikacji przez "Microsoft Visual Studio 2017 Installer Projects", tylko "statycznie" mam ustawione źródła dzwięków:

        private SoundPlayer adc_barrierSound = new SoundPlayer(@"F:\VS2017 Apps\Summs CD\SummsCD\SummsCD\Properties\Adc-barrier.wav");
        private SoundPlayer adc_claritySound = new SoundPlayer(@"F:\VS2017 Apps\Summs CD\SummsCD\SummsCD\Properties\Adc-clarity.wav");
        private SoundPlayer adc_cleanseSound = new SoundPlayer(@"F:\VS2017 Apps\Summs CD\SummsCD\SummsCD\Properties\Adc-cleanse.wav");

i tak dalej.
No a dosyć oczywistym faktem jest, że ok dopóki nawet zainstalowana apka jest u mnie na komputerze to sobie znajdzie to pliki i będzie hulać, gorzej jak pójdzie do kolegi Staszka, Marka. Tam plików nie ma pod tymi lokalizacjami, a więc jak uzależnić tworzenie danych SoundPlayerów od faktycznej ścieżki gdzie są na danym komputerze? + jak rozsądnie w kreatorze instalatora dodać owe pliki z dźwiękami?

1

Poczytaj o względnych ścieżkach dostępu niestety jestem mobilne i nic konkretnego ci nie pokaże. Ogólnie chodzi o to, że możesz uzyskać ścieżkę np do folderu w twoim projekcie i wtedy program sam będzie sobie ją doszukiwał zamiast podawać jak teraz to robisz w formie ścieżki bezwzględnej :)

0
Akihito napisał(a):

Poczytaj o względnych ścieżkach dostępu niestety jestem mobilne i nic konkretnego ci nie pokaże. Ogólnie chodzi o to, że możesz uzyskać ścieżkę np do folderu w twoim projekcie i wtedy program sam będzie sobie ją doszukiwał zamiast podawać jak teraz to robisz w formie ścieżki bezwzględnej :)

Zaraz postaram się coś poszukać, jakbyś miał chwile by coś tutaj mi napisać i jakoś podpowiedzieć, to chętnie przygarnę każdą sugestię i pomoc! :D

1

Ścieżka relatywna i absolutna.

Absolutna:

C:\abc.wav

Relatywna:

sounds\abc.wav

Czyli w folderze z twoim programem/instalatorem jest folder sounds który zawiera abc.wav

title

0

Czyli po instalacji programu "jesteśmy" domyślnie w jego głównym folderze i względem niego się poruszamy?

1
Sebixxu napisał(a):

Czyli po instalacji programu "jesteśmy" domyślnie w jego głównym folderze i względem niego się poruszamy?

99.9% Tak

Możesz w console appce sprawdzić, bo nie mam visuala

Wrzuć np .exe do np

C:\test

i dodaj w folderze test folder "temp" i w nim plik tekstowy "test.txt" i odpal execa

string curFile = @"temp\test.txt";
Console.WriteLine(File.Exists(curFile) ? "File exists." : "File does not exist.");

https://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx

0

AFAIK nie, aktualny katalog (i co za tym idzie, względne ścieżki) zależy od tego, jak program został uruchomiony. Skrót na przykład może to modyfikować - ma takie pole jak "Start In". Można wykorzystać Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) żeby pobrać ścieżkę do folderu z którego uruchomiony jest program.

0

Dobra wygląda to tak:
Aplikacja jest zainstalowana w

F:\Testing

Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) zwraca:

file:\F:\Testing

Pliki muzyki instalują się wraz z apką czyli do:

F:\Testing\Music

Przykładowe odwołanie do pliku dzwiękowego w kodzie wygląda tak:

private SoundPlayer top_teleportSound = new SoundPlayer(@"\Music\Toplane-teleport.wav");

No ale mimo to wpada mi w obsługę błędów czyli w catch(...):

private void PlayingSound(SoundPlayer position_summonerSound)
        {
            try
            {
                position_summonerSound.Play();
            }
            catch (FileNotFoundException ex)
            {
                string where = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
                MessageBox.Show("Can't find file.." + where);
            }
        }

//Najbardziej intryguje mnie czym jest file:\ czy to właśnie to nie powoduje problemu, bo wszystko inne wydaje się być dosyć logiczne.

1
Sebixxu napisał(a):

//Najbardziej intryguje mnie czym jest file:\ czy to właśnie to nie powoduje problemu, bo wszystko inne wydaje się być dosyć logiczne.

Dobra, bez visuala jakoś mi się udało to zrobić (PS: ja nie mogłem użyć @ przy ścieżkach przez brak visuala)

  • .exe wyświetla swoją ścieżkę (ale do niczego jej nie używa)
  • Odpala innego execa w folderze "niżej"

1.PNG

using System;

public class Test
{

    public static void Main()
    {
		Console.WriteLine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase));
		Console.WriteLine("Otwieram jet brainsa");
		System.Diagnostics.Process.Start("test\\JetBrains.dotTrace.2017.1.3.web.exe");
		Console.ReadKey();
    }
}
0

Nie pozostaje mi napisać chyba nic innego jak..
<3
Okropnie dziękuje, za cały trud i starania.
Działa!
Ba, rozumiem! Proste tylko człowiek głupi, jutro pozamieniam to wszystko na odpowiedni format i podeślę znajomym do pośmiania się.
Jeszcze raz dziękuje! :)

0
Sebixxu napisał(a):

Nie pozostaje mi napisać chyba nic innego jak..
<3
Okropnie dziękuje, za cały trud i starania.
Działa!
Ba, rozumiem! Proste tylko człowiek głupi, jutro pozamieniam to wszystko na odpowiedni format i podeślę znajomym do pośmiania się.
Jeszcze raz dziękuje! :)

Z ciekawości, to jakiś programik do league of legends?

timer summoner spelli?

0
WeiXiao napisał(a):
Sebixxu napisał(a):

Nie pozostaje mi napisać chyba nic innego jak..
<3
Okropnie dziękuje, za cały trud i starania.
Działa!
Ba, rozumiem! Proste tylko człowiek głupi, jutro pozamieniam to wszystko na odpowiedni format i podeślę znajomym do pośmiania się.
Jeszcze raz dziękuje! :)

Z ciekawości, to jakiś programik do league of legends?

Tak, zdarza mi się czasem grać z kumplami 5vs5, często na czacie jest spam i nie ma jak dobrze zapisać kiedy jakie umiejętności przeciwników się kończą. Więc uznałem, że zrobię mini apkę "do kontrolowania tego", mając wszystko pod ręką. ;)

//Tak, ale manualny, nie ingeruje w klienta/samą grę(bo nie umiem + pewnie to nielegalne ;) ) klika się, zaczyna odliczać, mówi co i kiedy ktoś ma

1 użytkowników online, w tym zalogowanych: 0, gości: 1