Hei!
Minulla olisi sellainen kysymys, kun tekee ohjelmaa, niin Resourceihin voi tallentaa tiedostoja, esim. kuvia, ääniä jne. Mutta miten voi Visual Basic .Netillä purkaa tiedostoja Resourceista jotta esim. toinen ohjelma, joka on tallennettuna Resourceihin voitaisiin suorittaa.
Haluaisin tehdä samantyylisen sovelluksen joka purkaa tiedostot vaikkapa esim. Resourceista tai vastaavista samalla tavalla kuin asennusohjelmat (esim. NSIS, InnoSetup jne.).
Olisiko tämä mahdollista Visual Basic .Netillä?
Kiitos jo valmiiksi vastauksista!
T: Zeable
Moro Zeable!
Minä tapaan tehdä asennusohjelmat alusta loppuun aivan itse syystä, että voin tällöin taata, että asennuspaketteja ei voi purkaa esim. UniExtract-ohjelmalla, joka takaa käyttäjälle, että käytettäessä Uninstall moodia kaikki ohjelmaan sidotut liiokset poistetaan Windowsin rekisteristä automaattisesti ja että kaikki ohjelmaan sidotut tiedostot vapautetaan sidoksista järjestelmään ja kaikki tiedostot, jotka kuuluvat yksinomaan asennetun ohjelman käyttöön poistetaan kiintolevyltä.
Assemblystä voi lukea resursseja GetManifestResourceStream -metodilla. Vastaavasti listan assemblyssä olevista resursseista saa metodilla GetManifestResourceNames.
Eli tällainen pieni konsoliohjelma listaisi kaikki siinä itsessään olevien resurssien nimet:
Sub Main() Dim a = System.Reflection.Assembly.GetExecutingAssembly() Dim resNames = a.GetManifestResourceNames() For Each resName In resNames Console.WriteLine(resName) Next End Sub
neau33 kirjoitti:
Minä tapaan tehdä asennusohjelmat alusta loppuun aivan itse syystä, että voin tällöin taata, että asennuspaketteja ei voi purkaa esim. UniExtract-ohjelmalla, joka takaa käyttäjälle, että käytettäessä Uninstall moodia kaikki ohjelmaan sidotut liiokset poistetaan Windowsin rekisteristä automaattisesti ja että kaikki ohjelmaan sidotut tiedostot vapautetaan sidoksista järjestelmään ja kaikki tiedostot, jotka kuuluvat yksinomaan asennetun ohjelman käyttöön poistetaan kiintolevyltä.
Ihan pakko kysyä että mitä ihmettä? Siis vastaako tuo jotenkin Zeablen kysymykseen? Onko tuollaisessa 6 lauseen virkkeessä muutenkaan mitään järkeä, kun selvästi menet itsekin siinä sanoissasi sekaisin?
No heippa taas!
Tässä SharpDevelop 4.0 Beta2:lla vännetty esimerkki sovellus (AsennusTesti.exe), elikäs projektiin on lisätty resurssifilu MainForm.resx, johon on tuotu hiirellä kilkkaamalla tiedosto nimeltä MHDesktop.exe (näkyy resurssissa nimellä MHDesktop)...
Imports System.Resources Public Partial Class MainForm Public Sub New() Me.InitializeComponent() End Sub Sub Button1_Click(sender As Object, e As EventArgs) Dim resources As New _ ResourceManager(GetType(MainForm)) Dim Bytes As Byte() = _ CType(resources.GetObject("MHDesktop"), Byte()) resources = Nothing Dim fullPath As String = _ Application.StartupPath & "\MHDesktop.exe" Try Kill(fullPath) Catch ex As Exception End Try FileOpen(1, fullPath, OpenMode.Binary, OpenAccess.Write) FilePut(1, Bytes): FileClose(1): Bytes = Nothing Do While Dir(fullPath) = "" Application.DoEvents: Loop 'Testi... Shell(fullPath, AppWinStyle.NormalFocus) End Sub End Class
Nyt ompi sitten niin, että voin purkaa tämän, käännettäessä ohjelmaan sisään upotettavan, resurssin sisällön esim. Red Gate's .NET Reflector ohjelmalla (koskee mitä tahansa .NET Framework ohjelmaa), että nimimerkki Grez voisi hieman miettiä että kuka tässä nyt sekoilee sanoissaan...
Sanoissa sekoilemisesta... Oletetaan nyt sitten, että et seonnut tuon virkkeen kanssa vaan tosiaan tarkoitit mitä kirjoitit. Kerroit että UniExtract-ohjelma takaa käyttäjälle, että käytettäessä Uninstall moodia kaikki ohjelmaan sidotut liitokset poistetaan Windowsin rekisteristä automaattisesti.
Jos oletetaan, että tuo nyt pitäisi paikkansa, niin en ymmärrä miksi haluat estää sen käytön.
Mielestäni viimeisimmässä viestissäsikään ei ole mitään pointtia minulle, vaikka viestisi perusteella sen minulle kirjoitit. Ilmeisesti virheellisesti oletit, että en tiennyt jotain mainitsemistasi asioista.
Heippa taas!
Toivottavasti nimimerkki Zeable näkee viimeisimmässä viestissäni edes jonkun pointin...
neau33, jos kerran ammattilaisten tekemät asennusohjelmat ovat huonoja ja itse pystyt helposti parempaan, mikset saman tien rupea myymään tuotettasi ja tienaa roimasti rahaa? Eiköhän vain omasta viritelmästäsi löydy enemmän bugeja ja yllättäviä "ominaisuuksia"...
Metabolix, en ole väittänyt ammattilaisten tekemiä asennusohjelmia huonoiksi. Totesin vain, että vaikkapa InnoSetup-asennuspaketeista voi halutessaan purkaa haluamansa matskun ja ohitella rekisteröinnit, mikä ei ole aina välttämättä varsinaisen asennettavan ohjelman/ohjelmiston tekijän tahi julkaisijan mieleen...
Edelleen on niin, että varsinkin päivitettyjen msiexec-asennuksien postaminen jättää monesti rekisteriin turhaa kamaa, jolloin virustorjuntaohjelmat ko. kamaa skanailessaan hidastavat konetta, josta asiasta ei käyttäjälle ole varmaankaan mitään hyötyä...
On sitä löytynyt ammattilaistenkin tekemistä ohjelmista bugeja ja yllättäviä "ominaisuuksia", vaan ovat jotkut näistä siitä huolimatta tienanneet todella rutkasti rahaa...
neau33 kirjoitti:
Metabolix, en ole väittänyt ammattilaisten tekemiä asennusohjelmia huonoiksi. Totesin vain, että vaikkapa InnoSetup-asennuspaketeista voi halutessaan purkaa haluamansa matskun ja ohitella rekisteröinnit, mikä ei ole aina välttämättä varsinaisen asennettavan ohjelman/ohjelmiston tekijän tahi julkaisijan mieleen...
Jos käyttäjä itse päättää purkaa kamat ulos paketista ja käsin viritellä ne käyttöön, niin ei käyttäjä silloin voi olettaa, että niiden poistaminen onnistuu automaagisesti. Toisaalta jos käyttäjä välttämättä haluaa kaivaa ne tavarat ulos paketista käsin, niin se onnistuu kyllä siitä sinun tekemästäkin paketista isommalla vaivalla. Eli nähdäkseni tuossa yrität ratkoa ongelmaa, jota todellisuudessa ei edes ole, eikä ratkaisukaan toimi 100%.
Toki jos ja kun versiointi ja roskienkeruu omalla asennusohjelmallasi toimii paremmin kuin yleisesti tarjolla olevilla asennusohjelmilla niin pahuksen hyvä. Se ei vaan mielestäni mitenkään liitty siihen, saako paketin purettua käsin vai ei.
Aihe on jo aika vanha, joten et voi enää vastata siihen.