WPF如何判斷程序是不是第一次啟動?

問題一:我想寫一個功能,就是程序在啟動的時候,判斷這個程序是不是在這台電腦上第一次安裝運行(和剛開完機的第一次啟動不一樣,是第一次出現在這個計算機內),像是某些軟體只有第一次打開才有的歡迎頁一樣,在網上搜到一些方法,但是基本上都是WinForm的,WPF的完全沒找到,希望能在知乎找到答案。

問題二:我想讓我的WPF程序有一個圓形的進度條,該怎麼實現呢?

問題三:我想通過一個文本文檔來存取一個值,然後每天減少一點,WPF中的進度條的值則取這個文本文檔內的值,該怎麼實現呢?

PS:我不知道是我不會用知乎還是什麼,感覺每次回答的人都好少啊,是不是只有被邀請回答的才能看到回答啊?


謝邀。沒有人回答你,因為知乎不是個學習的地方。

如果你要學習,可以移步SegmentFault

如果想知道是不是第一次運行,當然是記錄在文件或者註冊表裡,甚至遠程伺服器,以及加密設備里。無論你用什麼都不脫離這個。沒有任何可幻想的黑魔法。

圓形進度條。。。自己畫,或者第三方控制項。

讀寫文本文件。。。請移步.NET 文檔。

在知乎上詢問基礎知識,會被告訴,你這就是伸手黨。

知乎是討論神秘學——別人不輕易知道的知識的地方。

這裡不同情弱者,只會怒其不爭,如你所見,如果你有感情問題,在知乎勸分是政治正確的。

如果你自學能力不足,在知乎只有勸你放棄。請努力自強,讓自己強大起來。

如果你想強大,我告訴你捷徑,買書充值自己。馬大師曾經曰過:用腦子想一想,不充值你怎麼變得更強。

嗯,我說太多了。


chrome原先是在主程序同級目錄下創建firstrun文件,按照這個文件是否存在來判斷

圓形進度條可以自己慢慢調教吧,就是累點

你可以在文本文檔中存第一次的時間,然後每次都用當前時間和文檔中的時間做差,如果想防止改計算機時間達到時間倒流的目的,你大概需要和伺服器通信,用伺服器的時間來搞


靠譜的方法是註冊表

當然這並不能防止有心人刪註冊表項

UWP裡面提供了local storage API,每個應用可以有一個空間用來存儲自己的數據,你可以看看WPF裡面有沒有等價的東西


教你一個簡單的辦法吧,判斷是不是直接啟動的,如果直接啟動,往桌面上建一個快捷方式,快捷方式帶入一個參數,你每次啟動的時候判斷有沒有傳入這個參數,沒有就視為第一次運行,然後圓形進度條,nuget上大把項目,接著最後一個問題,很簡單吧,我就不說了。


如果你實在不會,那我告訴你吧

在配置文件裡面設置一個變數,軟體安裝之後默認為0,每次開啟軟體在StartUp中+1

還有一個問題哦,環形進度條,用一個Progressbar更改一下他的模板,重點設置一下內環和外環,OK啦。


新建了個工程加了幾張截圖,以供參考

1. wpf工程內的properties裡面添加一條(類型string或int都行),從未啟動過的賦起始值,一旦啟動一次判斷完成之後賦個別的值。

Properties.settings

MainWindow.xaml.cs

2. 自己用canvas畫或者導入第三方插件

這裡只展示一種方法,要讓畫的圓轉起來需要在代碼裡面加入一個handler來處理

或者像其他答主說的,多畫幾張圖。記得需要作為resources類型加入到工程裡面,這樣會一起打包到exe裡面

3. 不需要文本文件,和1一樣,用properties再添加一條

代碼參見1

*注意properties選擇為User類型,也就是說每台電腦每個不同路徑第一次啟動都會生成新的properties然後保存


這三個問題在我看來寫過一兩個項目之後應該都不會是問題,如果是新人,我覺得提問沒有問題,但是你來錯地方了。

給你幾個最簡單的解決方案

問題1,程序第一次運行時目錄下生成一個文件,之後去找這個地方有沒有這個文件就知道是不是第一次運行了。做高級一點,文件內容可以寫下運行時間,機器碼什麼的,自己想吧。

問題2,找個第三方的空間即可。

問題3,進度條一般就需要兩個值,當前值和最大值,你都能讀文件了,怎麼綁上去參考問題2的文檔就好了。

PS,知乎應該問一下大家能夠討論,頭腦風暴的問題,不要題一下太個人化和類百度知道的問題。這就是回答你問題的人不多的原因吧。


我同意Marmoset 所說,知乎甚至國內程序員多得很,但熱情幫你的少,噴你的永遠很多……

真要問問題,建議你還是去STACKOVERFLOW那裡,老外可是很熱心的。

我比較懶,就大致說一下我自己的解決思路

首先第三條,我建議你可以用XML來存儲,XML存儲讀取不難,網上找下資料就有了。

然後第一條,你可以存儲一個默認值,譬如1,然後只要打開過程序,這個默認值就會被改變,這樣就判斷說程序已經打開過了。如果擔心保密性問題,你可以用MD5加密了然後再存儲。存儲這個值你可以用剛才說的XML來存儲,也可以用WPF自帶的Settings 方法來存儲。

最後的圓形進度條,不知道你說的是不是這種:

我有做過,但我是用多線程+動態繪圖來做的,比較偏門不正統的方法。真正說正統的,應該是重新進度條控制項的模板,這個我就沒去研究過了。


問題1:user.ini或者註冊表

問題2:用個canvas畫ArcSegment

問題3:和WPF沒關係

寫程序,自己多想想


你可以搜搜「C# 互斥」,很久之前寫過,用這個實現的,太久沒用過C#了,找不到以前寫的代碼了。。


不是有控制項模版么。放個Path。想要啥形狀都行。

其他的,讀文件,讀時間差最簡單了。看你防範用戶要到什麼程度。


我覺得那個給建議去學習的回答不錯,其他建議對於一個明顯是新的不能再新的選手來說還是太高端了。

如果題主想再最短的時間內實現自己的想法,可以參考下面的方法:

1.學會讀寫文檔。

2.程序目錄下準備一個文檔,不要複雜,第一行標誌是否第一次讀寫,第二行是進度條的數據。

3.程序啟動,讀取,判斷是否第一次讀寫,處理。

4.讀取進度條數據,畫進度條不想學,第三方控制項不想找?準備n張不同進度的圖片,然後自己判斷進度數據顯示對應的圖片。

5.讀取系統時間,修改進度條數據(如果需要)

只要學會讀寫文檔,一切都搞定了。然後再去參考別的回答,好好學慣用新的知識完善程序。


1 應該可以在註冊表了寫一個值,判斷是第幾次啟動,

2 如果你要的進度條是個轉動的菊花,做一個動圖,放上去就好,

3 你自己找找看,應該也不難實現


在啟動的時候讀取一個文件,沒有則生成這個文件,用這個過程可以判斷是否是第一次啟動;

進度條應該有相應的控制項,具體說明移步MSDN;

文件io問題官方文檔說明應該也很清楚了,你控制項的內容去接受並顯示文件里的內容。

對wpf感興趣的話可以買一本相關的書看一看。不過其實很多書裡面的例子都是用的MSDN上的。多看看MSDN你會發現新大陸。共勉~


是的,這種細節問題你不邀請沒人會來回答。雖然知乎程序員多的要死,但是畢竟不是Stack Overflow。

第三的話你說的想法是可行的,開個文本文檔輸入輸出而已。不過你要想好文本文檔的格式,oi那樣沒有鍵只有值的方式不太好,可以使用xml, json等,或者你自己定義一種。

第一的話解決辦法和第三一樣,在文本文檔內存一個值記錄是不是第一次啟動。

第二個問題我沒用過wpf,不知道你說的這個形狀的gui api提不提供。api不提供就需要第三方庫或者自己寫了。

如果記錄數據越來越多,不建議使用文本文檔,使用小型資料庫是個好辦法,比如sqlite就很方便。


非常感謝各位的回答,我會把你們所回答的所有方法都進行嘗試,直到找到對我可行度高的位置,謝謝你們把你們的經驗分享給我 我會努力吸取,然後學到更多的知識的,知乎我不知道能不能結帖挑選出最喜歡的答案。。。所以就不做結帖處理啦


簡單啊

取cpuid,上傳到伺服器就行

每次啟動查下有沒有


推薦閱讀:

微軟的.NET戰略是不是已經失敗了?
同事離職,我接盤了個垃圾項目,該如何是好?
零基礎新手求推薦C#.net的書?
如何在幾天之內將數萬行C#代碼移入Flex?
如何對 Expression 進行計算?

TAG:NET | C# | WindowsPresentationFoundationWPF |